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

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

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



답변

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

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


답변

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

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

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

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

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


답변

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

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

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


답변

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


답변


답변

경고 : 변경되는 테이블에 트리거 가있는 경우 가짜 데이터를 @@ROWCOUNT반환 할 수 있습니다 . 연결되어 !

@@ROWCOUNT트리거가 아닌 실제 문에 의해 영향을받는 레코드 수를 반환합니다!


답변