SET NOCOUNT 업그레이드 후 SQL 호출 처리 오류


13

테스트 환경을 새 서버 및 업데이트 된 버전의 Microsoft SQL Server로 업그레이드하고 있으며 문제가 발생했습니다.

새 서버에서는 일부 저장 프로 시저를 실행할 때 이전 코드에서 "개체를 닫을 때 작업이 허용되지 않습니다"라는 메시지가 표시됩니다. 이 메시지는 이전 서버에는 나타나지 않았습니다. 추적 할 때 SET NOCOUNT ON;저장 프로 시저를 추가하여 문제를 해결할 수 있습니다 .

데이터베이스의 기본값을 살펴본 결과 기본값과 다른 설정 (SQL Server 2008과 SQL Server 2014)이 없었습니다.

SET NOCOUNT ON저장된 procs 수천 개 를 추가 할 필요없이이 문제를 전 세계적으로 해결하기 위해 어떤 설정을 고려해야 합니까?


2
모든 저장 프로시 저는 의존하는 동작을 지정해야하며, 이는 사용자 옵션에 의존하는 것보다 훨씬 안전합니다. 나는 모든 저장 프로 시저가 항상 항상로 시작해야한다고 주장 할 수도 있습니다 SET NOCOUNT ON;.
Aaron Bertrand

@AaronBertrand 동의합니다. I가 마지막 프로젝트에 설정 NOCOUNT했다 템플릿을했다,하지만 현재이 프로젝트의 옵션을 선택하지 않습니다
UnhandledExcepSean

모든 저장 프로 시저를 변경하고 저장 프로 시저 SET NOCOUNT ON;의 시작 부분 (이후 BEGIN)에 추가하는 스크립트를 작성할 수 있습니다 . 저장 프로 시저 수는 실제로 문제가되지 않습니다.
Erik A

1
@ Erik-A-저장 프로 시저로 시작할 수는 없습니다 BEGIN. 훌륭하지만 필수는 아닙니다.
Max Vernon

답변:


16

SQL Server 구성에는 시스템 저장 프로 시저를 user options사용하여 설정할 수있는 적절한 옵션 이 있습니다 sp_configure. SQL Server Science 에서 사용자 옵션을 검사하고 설정하는 방법을 보여주는 블로그 게시물을 작성했습니다 .

간단히 말해 다음을 사용하여 이전 서버에서 "구성 값"을 얻을 수 있습니다.

EXEC sys.sp_configure 'user options';

그런 다음 새 서버가 다음을 통해 동일한 옵션을 사용하도록 설정하십시오.

EXEC sys.sp_configure 'user options', <config value>;
RECONFIGURE

(<config value>를 이전 서버의 값으로 바꾸십시오).


그것은 거의 확실하게 원인입니다 (지금 확인을 기다리고 있습니다). 이전 서버의 값은 MS ( docs.microsoft.com/en-us/sql/database-engine/configure-windows/… ) 에 따라 NOCOUNT 512입니다 . 난 단지 @@ OPTIONS보고 있었다 나는이 이전에 보지 못했다
UnhandledExcepSean

확실히 맞습니다. 경우 SET NOCOUNT ON해결할 수있는 문제 512 문제, 설정 사용자 옵션을 수정합니다.
Max Vernon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.