문제

SQL Server 2005에는 행을 삭제하고 얼마나 많은지를 알 수있는 방법이 있습니까? 실제로 삭제?

나는 할 수있다 select count(*) 같은 조건으로, 나는 이것을 완전히 신뢰할 수 있어야합니다.

나의 첫 번째 추측은 @@ROWCOUNT 변수 - 그러나 그것은 설정되지 않았습니다

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

select @@ROWCOUNT 

항상 0을 반환합니다.

MSDN을 제안합니다 OUTPUT 건축, 예를 들어

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가 켜져있는 경우에도 업데이트됩니다. SET NOCOUNT 실행 후 얻은 메시지에만 영향을 미칩니다.

그래서 당신이 결과를 가지고 일하려고한다면 @@ROWCOUNT 예를 들어 Ado.net에서 SET 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.net에서 전자는 매개 변수에 의해 액세스되고 후자는 sqldatareader로 액세스 할 것이다. 아마도 당신은 아마도 절차의 반환 값을 RowCount로 착각하고 있습니까?

하나의 열, ID로 온도 테이블을 만듭니다.

삭제하려는 ID를 선택하여 임시 테이블에 삽입하십시오. 그것은 당신에게 당신의 수를줍니다.

ID가있는 테이블에서 삭제 (임시 테이블에서 ID를 선택)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top