2011-12-20 3 views
17

특정 레코드를 삭제하는 저장 프로 시저가 있습니다. 삭제 된 레코드의 수를 얻어야합니다.삭제 된 레코드 수를 얻으려면 어떻게해야합니까?

DELETE FROM OperationsV1.dbo.Files WHERE FileID = @FileID 
SELECT @@ROWCOUNT AS DELETED;    

을하지만 해당 레코드가 삭제 되더라도 DELETED은 0으로 표시됩니다 :

나는 이런 식으로 작업을 수행하려고 노력했다. 나는 SET NOCOUNT OFF를 시도했다; 성공없이. 도와 주실 수 있겠습니까? 감사합니다. .

+1

? 그것을 돌려주고 싶어? 당신은'DECLARE @DeleteCnt INT; SELECT @DeleteCnt = @@ ROWCOUNT'를 사용하여 값을 변수에 캡처 한 다음 감사 테이블이나 무언가로 반환하거나 삽입 할 수 있습니다. –

답변

24

정상적으로 작동합니다. NOCOUNT의 설정은 부적합합니다.

표시 한 두 단어 사이에 진술이 있습니까? @@ROWCOUNT은 모든 명령문 다음에 재설정되므로 명령문없이 즉시 값을 검색해야합니다.

+0

아니요, 그 사이에는 아무 것도 없습니다. –

+0

어떻게 테스트하나요? Management Studio에서? –

+5

죄송합니다. 제 실수였습니다. SELECT @@ ROWCOUNT를 DELETED로 두었습니다. 잘못된 Delete 문 다음에. –

-5
START TRANSACTION; 
SELECT @before:=(SELECT count(*) FROM OperationsV1.dbo.Files); 
DELETE FROM OperationsV1.dbo.Files WHERE FileID = @FileID; 
SELECT @after:=(SELECT count(*) FROM OperationsV1.dbo.Files); 
COMMIT; 
SELECT @[email protected] AS DELETED; 

나는 SQL 서버에 대해 알고 있지만, MySQL의 SELECT count(*) FROM ...에 매우 싼 작동하지 않습니다. 작업 후 카운트를 확인하기 위해 저장 프로 시저를 디버깅 할 때

+0

고마워요. Eugen. 아무도 왜 @@ ROWCOUNT가 나를 위해 작동하지 않는지 설명 할 수 있는지 보도록하겠습니다. 아무도 @@ ROWCOUNT에 도움이되지 않으면 귀하의 솔루션을 사용하겠습니다. –

+2

기본 트랜잭션 격리 수준에서는 다른 삭제로 인해이 쿼리 중간에 개수가 변경 될 수 있습니다. – Andomar

+7

@David - 이것을 사용하지 마십시오. 이것은 비싸고 경쟁 조건이 있습니다. –

1

나는 이러한 삭제로이 코드를 사용 : 당신은 당신이 ROWCOUNT` @@`에서 얻을 값으로합니까 무엇

DELCARE @Msg varchar(30) 
... 
SELECT @Msg = CAST(@@ROWCOUNT AS VARCHAR(10)) + ' rows affected' 
RAISERROR (@Msg, 0, 1) WITH NOWAIT 
관련 문제