복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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
    
  4. from https://stackoverflow.com/questions/1103260/return-number-of-rows-affected-by-update-statements by cc-by-sa and MIT license