MSDN은 IDbCommand.ExecuteNonQuery에 대해 다음과 같이 말한다.
UPDATE, INSERT 및 DELETE 문의 경우, 반환 값은 해당 명령의 영향을 받는 행의 수입니다. 다른 형식의 문이거나 롤백이 발생하면 반환 값은 -1입니다.
IDbCommand.ExecuteNonQuery이 -1을 반환하는 또다른 경우가 있다. ExecuteNonQuery가 -1 값을 반환해서, 데이터베이스를 쿼리분석기로 조회해 본다. 그런데 반환값이 의미하는 바와는 다르게 쿼리는 데이터를 변경했다. 무엇이 문제일까?
이런 경우에는 SET NOCOUNT
옵션이 켜져(ON) 있을 가능성이 높다. 이 옵션을 켜놓으면 상당한 성능 향상을 볼 수 있다. 그래서 SET NOCOUNT ON
을 기본 옵션으로 설정하는 경우가 많다.
문제를 해결하는 방법은 상당히 쉬운데 해당 쿼리문 앞에 SET NOCOUNT OFF
를 추가하면 된다. 다음은 예제이다.
string sqlText = "UPDATE example_table SET example_column='example'";
string sqlText = "SET NOCOUNT OFF UPDATE example_table SET example_column='example'";
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
이 옵션을 <꺼놓으면>
상당한 성능 향상을 볼 수 있다.
그래서 SET NOCOUNT
설정하는 경우가 많다.
오타인가요? 말이 앞뒤가 안맞네여;
위의 말대로라면
라는 뜻이 되는;;
지적하신 바가 맞네요. 글을 수정했습니다. -_-;;