[SQL] 행 반환 번호는 UPDATE 문에 의해 영향을
SQL행 반환 번호는 UPDATE 문에 의해 영향을
어떻게 결과 집합으로, 저장 프로 시저 (SQL 서버 2005)에서 UPDATE 쿼리에 의해 영향을받는 행의 수를 얻을 수 있습니다. 예를 들면
CREATE PROCEDURE UpdateTables
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
UPDATE Table1 Set Column = 0 WHERE Column IS NULL
UPDATE Table2 Set Column = 0 WHERE Column IS NULL
UPDATE Table3 Set Column = 0 WHERE Column IS NULL
UPDATE Table4 Set Column = 0 WHERE Column IS NULL
END
그런 다음 반환 :
Table1 Table2 Table3 Table4
32 45 0 3
해결법
-
==============================
1.
CREATE PROCEDURE UpdateTables AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; DECLARE @RowCount1 INTEGER DECLARE @RowCount2 INTEGER DECLARE @RowCount3 INTEGER DECLARE @RowCount4 INTEGER UPDATE Table1 Set Column = 0 WHERE Column IS NULL SELECT @RowCount1 = @@ROWCOUNT UPDATE Table2 Set Column = 0 WHERE Column IS NULL SELECT @RowCount2 = @@ROWCOUNT UPDATE Table3 Set Column = 0 WHERE Column IS NULL SELECT @RowCount3 = @@ROWCOUNT UPDATE Table4 Set Column = 0 WHERE Column IS NULL SELECT @RowCount4 = @@ROWCOUNT SELECT @RowCount1 AS Table1, @RowCount2 AS Table2, @RowCount3 AS Table3, @RowCount4 AS Table4 END
-
==============================
2.이것은 SQL Server 2005의 OUTPUT 절 이후에 우수 정확히이다.
이것은 SQL Server 2005의 OUTPUT 절 이후에 우수 정확히이다.
예
CREATE TABLE [dbo].[test_table]( [LockId] [int] IDENTITY(1,1) NOT NULL, [StartTime] [datetime] NULL, [EndTime] [datetime] NULL, PRIMARY KEY CLUSTERED ( [LockId] ASC ) ON [PRIMARY] ) ON [PRIMARY] INSERT INTO test_table(StartTime, EndTime) VALUES('2009 JUL 07','2009 JUL 07') INSERT INTO test_table(StartTime, EndTime) VALUES('2009 JUL 08','2009 JUL 08') INSERT INTO test_table(StartTime, EndTime) VALUES('2009 JUL 09','2009 JUL 09') INSERT INTO test_table(StartTime, EndTime) VALUES('2009 JUL 10','2009 JUL 10') INSERT INTO test_table(StartTime, EndTime) VALUES('2009 JUL 11','2009 JUL 11') INSERT INTO test_table(StartTime, EndTime) VALUES('2009 JUL 12','2009 JUL 12') INSERT INTO test_table(StartTime, EndTime) VALUES('2009 JUL 13','2009 JUL 13') UPDATE test_table SET StartTime = '2011 JUL 01' OUTPUT INSERTED.* -- INSERTED reflect the value after the UPDATE, INSERT, or MERGE statement is completed WHERE StartTime > '2009 JUL 09'
다음의 결과가 반환되는
LockId StartTime EndTime ------------------------------------------------------- 4 2011-07-01 00:00:00.000 2009-07-10 00:00:00.000 5 2011-07-01 00:00:00.000 2009-07-11 00:00:00.000 6 2011-07-01 00:00:00.000 2009-07-12 00:00:00.000 7 2011-07-01 00:00:00.000 2009-07-13 00:00:00.000
당신이 OUTPUT으로 집계 함수를 사용할 수 없기 때문에 특정 경우에, 당신은 INSERTED의 출력. * 테이블 변수 또는 임시 테이블에서 캡처 및 기록을 계산해야합니다. 예를 들어,
DECLARE @temp TABLE ( [LockId] [int], [StartTime] [datetime] NULL, [EndTime] [datetime] NULL ) UPDATE test_table SET StartTime = '2011 JUL 01' OUTPUT INSERTED.* INTO @temp WHERE StartTime > '2009 JUL 09' -- now get the count of affected records SELECT COUNT(*) FROM @temp
-
==============================
3.당신이 @@ ROWCOUNT 캡처이 이동하지만, 같이 통계를 수집해야 할 수도 있습니다 :
당신이 @@ ROWCOUNT 캡처이 이동하지만, 같이 통계를 수집해야 할 수도 있습니다 :
declare @Fish table ( Name varchar(32) ) insert into @Fish values ('Cod') insert into @Fish values ('Salmon') insert into @Fish values ('Butterfish') update @Fish set Name = 'LurpackFish' where Name = 'Butterfish' select @@ROWCOUNT --gives 1 update @Fish set Name = 'Dinner' select @@ROWCOUNT -- gives 3
from https://stackoverflow.com/questions/1103260/return-number-of-rows-affected-by-update-statements by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] A는 빠르게 WHERE 이상의 조인? (0) | 2020.05.11 |
---|---|
[SQL] EF 4.1 예외 "공급자는 ProviderManifestToken 문자열을 반환하지 않았습니다" (0) | 2020.05.11 |
[SQL] 어떻게 2000 SQL 서버의 날짜 가득 임시 테이블을 생성 할 수 있습니까? (0) | 2020.05.11 |
[SQL] 어떻게 Cloudant / CouchDB를 내 SQL 지식을 사용할 수 있습니까? (0) | 2020.05.11 |
[SQL] MySQL의 쿼리 문자열에 대한 데이터베이스 내의 모든 테이블을 검색하려면? (0) | 2020.05.11 |