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.