programing

트랜잭션에서 삽입된 행 수를 가져오는 방법

muds 2023. 6. 30. 22:38
반응형

트랜잭션에서 삽입된 행 수를 가져오는 방법

트랜잭션에 의해 삽입된 행 수를 확인해야 하는 로그를 관리해야 합니다.그것을 역동적으로 할 수 있는 방법이 있습니까?

@@ROWCOUNT는 마지막 SQL 문의 영향을 받는 행 수를 제공합니다. 다음 번에 볼 때 값이 변경되므로 해당 명령에 따라 로컬 변수로 캡처하는 것이 가장 좋습니다.

DECLARE @Rows int
DECLARE @TestTable table (col1 int, col2 int)
INSERT INTO @TestTable (col1, col2) select 1,2 union select 3,4
SELECT @Rows=@@ROWCOUNT
SELECT @Rows AS Rows,@@ROWCOUNT AS [ROWCOUNT]

출력:

(2 row(s) affected)
Rows        ROWCOUNT
----------- -----------
2           1

(1 row(s) affected)

당신은Rows값 2, 삽입된 행의 수, 그러나 ROWCOUNT는 1입니다. 왜냐하면SELECT @Rows=@@ROWCOUNT명령이 영향을 받는 1개 행

트랜잭션에 여러 개의 INSERT 또는 UPDATE 등이 있는 경우, 현재 진행 중인 작업을 "계산"할 방법을 결정해야 합니다.각 테이블에 대해 별도의 총계를 가질 수도 있고, 단일 총계 값을 가질 수도 있고, 완전히 다른 값을 가질 수도 있습니다.추적할 각 합계에 대해 변수를 선언하고 해당 변수에 적용되는 각 작업에 따라 변수에 추가해야 합니다.

--note there is no error handling here, as this is a simple example
DECLARE @AppleTotal  int
DECLARE @PeachTotal  int

SELECT @AppleTotal=0,@PeachTotal=0

BEGIN TRANSACTION

INSERT INTO Apple (col1, col2) Select col1,col2 from xyz where ...
SET @AppleTotal=@AppleTotal+@@ROWCOUNT

INSERT INTO Apple (col1, col2) Select col1,col2 from abc where ...
SET @AppleTotal=@AppleTotal+@@ROWCOUNT

INSERT INTO Peach (col1, col2) Select col1,col2 from xyz where ...
SET @PeachTotal=@PeachTotal+@@ROWCOUNT

INSERT INTO Peach (col1, col2) Select col1,col2 from abc where ...
SET @PeachTotal=@PeachTotal+@@ROWCOUNT

COMMIT

SELECT @AppleTotal AS AppleTotal, @PeachTotal AS PeachTotal

로그/감사에 대한 추가 정보가 필요한 경우 다음을 출력할 수 있습니다.이렇게 하면 영향을 받는 행 수뿐만 아니라 어떤 레코드도 유지할 수 있습니다.

삽입 중 출력 절의 예로 SQL Server 삽입 ID 목록을 들 수 있습니다.

DECLARE @InsertedIDs table(ID int);

INSERT INTO YourTable
    OUTPUT INSERTED.ID
        INTO @InsertedIDs 
    SELECT ...

HTH

저는 5월 이전 게시물에 대한 답변을 찾았습니다.여기 있어요.

CREATE TABLE #TempTable (id int) 

INSERT INTO @TestTable (col1, col2) OUTPUT INSERTED.id INTO #TempTable select 1,2 

INSERT INTO @TestTable (col1, col2) OUTPUT INSERTED.id INTO #TempTable select 3,4 

SELECT * FROM #TempTable --this select will chage @@ROWCOUNT value

사용할 수 있습니다.@@trancountMSSQL에서

설명서에서 다음을 참조하십시오.

현재 연결에서 발생한 BEGIN TRANSACTION 문 수를 반환합니다.

언급URL : https://stackoverflow.com/questions/2272733/how-to-get-number-of-rows-inserted-by-a-transaction

반응형