SET NOCOUNT에 대한 다른 견해가있는 이 질문 에서 영감을 얻었습니다 ...
SQL Server에 SET NOCOUNT ON을 사용해야합니까? 그렇지 않다면 왜 안됩니까?
기능 6, 2011 년 7 월 22 일 편집 6
DML 뒤에 "xx rows 영향을받는"메시지를 표시하지 않습니다. 이것은 결과 집합이며 전송되면 클라이언트가 처리해야합니다. 작지만 측정 가능합니다 (아래 답변 참조).
트리거 등의 경우 클라이언트는 영향을받는 여러 "xx 행"을 수신하므로 일부 ORM, MS Access, JPA 등에 대한 모든 방식의 오류가 발생합니다 (아래 편집 참조).
배경:
일반적으로 허용되는 모범 사례 (이 질문까지는 SET NOCOUNT ON
SQL Server의 트리거 및 저장 프로 시저에 사용하는 것이 좋습니다 . 우리는 어디에서나 사용하며 빠른 Google은 많은 SQL Server MVP도 동의합니다.
MSDN은 이것이 .net SQLDataAdapter를 손상시킬 수 있다고 말합니다 .
이제 이것은 SQLDataAdapter가 "n 개의 영향을받는 행"메시지가 일치 할 것으로 예상하기 때문에 완전히 CRUD 처리로 제한됨을 의미합니다. 그래서 나는 사용할 수 없습니다 :
- 중복을 피하기 위해 존재하는 경우 (행에 영향을주지 않는 메시지) 참고 :주의해서 사용하십시오
- 존재하지 않는 곳에
- 사소한 업데이트 필터링 (예 : 실제로 데이터가 변경되지 않음)
- 이전에 테이블 액세스 (예 : 로깅)를 수행하십시오.
- 복잡성 또는 비 규범화 숨기기
- 기타
질문에서 marc_s (그의 SQL 물건을 알고있는 사람)는 그것을 사용하지 않는다고 말합니다. 이것은 내가 생각하는 것과 다릅니다 (그리고 나는 SQL에서도 다소 유능하다고 생각합니다).
내가 뭔가를 잃어 버렸을 수도 있습니다 (명백하게 지적하십시오). 여러분은 어떻게 생각하십니까?
참고 : 요즘에는 SQLDataAdapter를 사용하지 않기 때문에이 오류가 발생한 지 몇 년이 지났습니다.
의견 및 질문 후 편집 :
편집 : 더 많은 생각 ...
여러 클라이언트가 있습니다. 하나는 C # SQLDataAdaptor를 사용하고 다른 하나는 Java의 nHibernate를 사용할 수 있습니다. 이것들은로 다른 방법으로 영향을받을 수 있습니다 SET NOCOUNT ON
.
저장된 proc를 메소드로 간주하면 일부 내부 처리가 자신의 목적에 따라 특정 방식으로 작동한다고 가정하는 것이 좋지 않습니다 (패턴 방지).
편집 2 : 자 NHibernate 질문을 깨는 트리거는 여기서 SET NOCOUNT ON
설정할 수 없습니다
편집 3 : MVP 동료 덕분에 더 많은 정보
편집 4 : 2011 년 5 월 13 일
편집 5 : 2011 년 6 월 14 일
JPA, 저장 프로 시저를 테이블 변수와 함께 중단 합니다. JPA 2.0은 SQL Server 테이블 변수를 지원합니까?
편집 6 : 2011 년 8 월 15 일
SSMS "행 편집"데이터 그리드에는 SET NOCOUNT ON : GROUP BY를 사용한 업데이트 트리거가 필요합니다.
편집 7:07 3 월 2013
@RemusRusanu의 자세한 내용 :
SET NOCOUNT ON은 실제로 성능 차이를 크게 만들어 줍니까?