저장 프로 시저의 영향을받는 레코드 수를 어떻게 얻을 수 있습니까?


86

를 들어 INSERT, UPDATEDELETE데이터베이스에 대해 직접 실행 된 SQL 문, 대부분의 데이터베이스 제공 업체는 영향을받는 행의 수를 반환합니다. 저장 프로 시저의 경우 영향을받는 레코드 수는 항상 -1입니다.

저장 프로 시저의 영향을받는 레코드 수를 어떻게 얻습니까?


1
Set No Count도 내 문제였습니다. 테스트하려면 Management Studio에서 저장 프로 시저를 실행하고 개수가 있는지 확인한 다음 출력 변수가 있는지 확인합니다.
user2624356

답변:


80

저장 프로 시저에 대한 out 매개 변수를 등록하고 @@ROWCOUNTSQL Server 사용 여부 에 따라 값을 설정합니다 . SQL%ROWCOUNTOracle을 사용하는 경우 사용하십시오 .

여러 개의을 가지고있는 경우 각 작업에 대한 INSERT/UPDATE/DELETE결과를 저장할 변수가 필요 @@ROWCOUNT합니다.


46

@@RowCount SQL 문에 의해 영향을받는 레코드 수를 제공합니다.

@@RowCount후 즉시 발행하는 경우에만 작동합니다. 따라서 오류를 트래핑하는 경우 동일한 줄에서 수행해야합니다. 분할하면 두 번째로 넣는 것이 놓칠 것입니다.

SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR

문이 여러 개있는 경우 각 문에 대해 영향을받는 행 수를 캡처하여 합산해야합니다.

SELECT @NumRowsChanged = @NumRowsChanged  + @@ROWCOUNT, @ErrorCode = @@ERROR

33

SET NOCOUNT ON저장 프로 시저 스크립트 (기본적으로 SQL Server Management Studio)에 설정되어있는 것으로 나타 났습니다.SqlCommand.ExecuteNonQuery(); 항상 -1을 반환 한 .

나는 그것을 설정했다 : SET NOCOUNT OFF사용할 필요없이 @@ROWCOUNT.

자세한 내용은 여기에서 찾을 수 있습니다. SqlCommand.ExecuteNonQuery ()는 삽입 / 업데이트 / 삭제를 수행 할 때 -1을 반환합니다.


이것은 나를 위해 작동합니다. 내 저장된 proc은 단순한 삽입 문이며 작동하는 것 같습니다. 감사!
Harvey Darvey 2013

감사! 참조를 잘했습니다.
Leo Gurdian

8

Microsoft SQL Server의 경우 @@ROWCOUNT변수를 반환하여 저장 프로 시저의 마지막 문이 영향을받은 행 수를 반환 할 수 있습니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.