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
'bestsource' 카테고리의 다른 글
시작은 없고, 기능은 바둑에서 끝납니까? (0) | 2023.10.26 |
---|---|
Google Maps V3 - 주어진 경계에 대한 줌 레벨을 계산하는 방법 (0) | 2023.10.26 |
이미지 또는 스팬 태그를 사용하지 않고 CSS를 통해 UL/LI HTML 목록에서 Bullet 색상을 설정하는 방법 (0) | 2023.10.26 |
CORS - httprequest를 '사전 비행'하려면 어떻게 해야 합니까? (0) | 2023.10.26 |
Android TextView : "setText로 표시된 텍스트 연결 안 함" (0) | 2023.10.26 |