를 들어 INSERT
, UPDATE
및 DELETE
데이터베이스에 대해 직접 실행 된 SQL 문, 대부분의 데이터베이스 제공 업체는 영향을받는 행의 수를 반환합니다. 저장 프로 시저의 경우 영향을받는 레코드 수는 항상 -1
입니다.
저장 프로 시저의 영향을받는 레코드 수를 어떻게 얻습니까?
답변
저장 프로 시저에 대한 out 매개 변수를 등록하고 @@ROWCOUNT
SQL Server 사용 여부 에 따라 값을 설정합니다 . SQL%ROWCOUNT
Oracle을 사용하는 경우 사용하십시오 .
여러 개의을 가지고있는 경우 각 작업에 대한 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
트리거가 아닌 실제 문에 의해 영향을받는 레코드 수를 반환합니다!