bestsource

SQL 서버 저장 프로시저에서 삭제된 행 수 계산

bestsource 2023. 10. 26. 21:18
반응형

SQL 서버 저장 프로시저에서 삭제된 행 수 계산

SQL Server 2005에서 행을 삭제하고 실제로 삭제된 행이 몇 개인지 알려주는 방법이 있습니까?

나는 할 수 있습니다.select count(*)같은 조건이지만, 저는 이것이 완전히 신뢰할 수 있는 것이 필요합니다.

제 첫 번째 추측은 그 다음에@@ROWCOUNT변수 - 예를 들어 설정되어 있지 않습니다.

delete 
from mytable 
where datefield = '5-Oct-2008' 

select @@ROWCOUNT 

항상 0을 반환합니다.

MSDN은 예를 들어, 건설을 제안합니다.

delete from mytable 
where datefield = '5-Oct-2008' 
output datefield into #doomed

select count(*) 
from #doomed

구문 오류로 인해 실제로 실패합니다.

무슨 생각 있어요?

해보셨습니까?SET NOCOUNT OFF?

SQL2000에서 이와 같은 정확한 목적으로 @@ROWCOUNT를 문제없이 사용합니다.그러나 이 카운트를 확인하기 전에 실수로 이 카운트를 재설정하지 않도록 해야 합니다(BOL: '이 변수는 IF 문과 같이 행을 반환하지 않는 문에 의해 0으로 설정됩니다.').

그냥 이렇게 하면 됩니다.

SET NOCOUNT off ;
SELECT @p1 = @@ROWCOUNT

여기서 p1은 저장 프로시저에서 설정한 출력 파라미터입니다.도움이 되길 바랍니다.

당신의 예를 들어보면@@ROWCOUNT작동해야 합니다. 삭제된 행을 여러 개 확인하는 것이 적합합니다.응용 프로그램에서 삭제하려는 경우 다음을 사용해야 합니다.SET NOCOUNT ON

MSDN @@ROWCOUNT 기능은 SET NOCOUNT가 ON인 경우에도 업데이트됩니다.SET NOCOUNT실행 후에 받는 메시지에만 영향을 미칩니다.

그래서 만약 당신이 그 결과를 가지고 일을 하려고 한다면,@@ROWCOUNT예를 들어 ADO에서.그때 NETSET NOCOUNT ON분명히 도움이 될 겁니다

사용할 수 없는 케이스를 찾았습니다.@@rowcount, 예를 들어, 총 카운트 대신 삭제된 값의 고유 카운트를 알고 싶을 때.이 경우 다음을 수행해야 합니다.

delete from mytable 
where datefield = '5-Oct-2008' 
output deleted.datefield into #doomed

select count(distinct datefield)
from #doomed

OP의 구문 오류는output포함하지 않음deleted그 전에datefield필드 이름

호기심으로 절차를 어떻게 부르십니까? (보관 절차라고 가정합니다.)저장 프로시저의 반환 값(이 경우 0)과 행 집합 결과(이 경우 열이 하나인 단일 행) 간에 차이가 있기 때문입니다.ADO에서.즉, 전자는 매개 변수에 의해 액세스되고 후자는 SqlDataReader를 통해 액세스됩니다.혹시 절차의 반환 값을 행 수로 잘못 알고 계신 것은 아닐까요?

하나의 열로 임시 테이블을 만듭니다. ID.

삭제할 ID를 선택하는 임시 테이블에 삽입합니다.계산을 할 수 있게 되었군요.

id가 있는 테이블에서 삭제(temp table에서 id 선택)

언급URL : https://stackoverflow.com/questions/174143/counting-the-number-of-deleted-rows-in-a-sql-server-stored-procedure

반응형