programing

스토어드 프로시저의 영향을 받는 레코드의 수를 취득하려면 어떻게 해야 합니까?

newsource 2023. 3. 11. 09:01

스토어드 프로시저의 영향을 받는 레코드의 수를 취득하려면 어떻게 해야 합니까?

위해서INSERT,UPDATE그리고.DELETE데이터베이스에 대해 직접 실행되는 SQL 문은 대부분의 데이터베이스 공급자가 영향을 받는 행 수를 반환합니다.스토어드 프로시저의 경우 영향을 받는 레코드 수는 항상-1.

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

저장 프로시저의 out 파라미터를 등록하고 값을 설정합니다.@@ROWCOUNTSQL Server를 사용하는 경우.사용하다SQL%ROWCOUNTOracle을 사용하는 경우.

여러 개를 가지고 있다면INSERT/UPDATE/DELETE, 결과를 저장할 변수가 필요합니다.@@ROWCOUNT각 조작에 대해서요.

@@RowCountSQL 문의 영향을 받는 레코드 수를 나타냅니다.

@@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를 참조하십시오.Execute NonQuery 메서드 # 비고

연결에서 SET NOCOUNT ON이 설정되어 있는 경우(명령어 실행 전 또는 명령어 실행으로 시작된 트리거의 일부), 개별 문의 영향을 받는 행은 이 메서드에 의해 반환되는 영향을 받는 행의 수에 영향을 주지 않습니다.
카운트에 관여하는 스테이트먼트가 검출되지 않는 경우는, 반환치는 -1 입니다.롤백이 발생하면 반환값도 -1이 됩니다.

Microsoft SQL Server 의 경우는,@@ROWCOUNT저장 프로시저에서 마지막 문의 영향을 받는 행 수를 반환합니다.

@@ROW카운트

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

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

언급URL : https://stackoverflow.com/questions/1201358/how-can-i-get-the-number-of-records-affected-by-a-stored-procedure