2014-07-05 1 views
2

몇 가지 다른 테이블 업데이트를 수행하는 SQL Server 저장 프로 시저 (SQL Server 2008 R2 사용)가 있습니다. 행이 업데이트되면 감사 테이블에 정보를 기록하려고합니다.@@ ROWCOUNT는 0 행 수를 확인하지 않음

UPDATE tblName SET flag = 'Y' WHERE flag = 'N' 

IF @@ROWCOUNT > 0 
BEGIN 
    INSERT INTO auditTable...etc 
END 

불행하게도, 제로 행이 업데이트 된 경우에도 여전히 감사 테이블의 조치를 기록합니다

여기 내 의사 코드이다.

참고 : 업데이트되는 테이블에는 관련 트리거가 없습니다.

왜 이런 일이 일어날 수 있으리라 생각하십니까?

+2

괜찮아 보입니다. 다른 일이 계속되어야합니다. 이것은 분명히 실제 코드가 아닙니다. 너는 무엇을 버렸는가? update 문 바로 다음에'PRINT @@ ROWCOUNT'를 추가하십시오. – usr

+3

아마도 'UPDATE'와 그것을 다시 설정하는 'IF @@ ROWCOUNT'사이에 다른 진술이있을 것입니다. –

+1

결과가 무엇인지 보려면 IF @@ ROWCOUNT를 IF에 추가하십시오. –

답변

5

@@rowcount 설정합니다 T-SQL에서 실행되는 모든 문, 심지어 if 문, 그래서 일반적인 규칙은 당신이 관심있는 문 다음의 문에서 값을 캡처하는 것입니다.

그래서 후

update table set .... 

당신은

Select @mycount = @@Rowcount 

그런 다음 당신은 당신의 흐름 제어 나 메시지를 어떻게이 값을 사용합니다.

As the docs state

, 심지어 간단한 변수 할당은 @@rowcount 당신이 사람들이 그 문제를 진단 할 경우 실제 코드를 제공해야한다는이 경우 중요한 이유는

1. 아니라 의사를 설정합니다 암호.

+0

+1 및 여기에 0 행 업데이트가 캡처 된 방법이 나와 있습니다. http://sqlfiddle.com/#!3/cf0d9/2. 알 수 있듯이, OP의 패턴은 * 실제 * 0 업데이트를 캡처하지 않지만, 0이 아닌 업데이트는 0을 기록합니다. 왜냐하면 IF는'@@ ROWCOUNT' 결과를 읽은 후에도 영향을줍니다 (0으로 설정하기 때문입니다). . –

관련 문제