SET NOCOUNT Yükseltmeden sonra SQL çağrısı işlenirken hata oluştu


13

Test ortamımızı yeni bir sunucu ve Microsoft SQL Server'ın güncellenmiş sürümü ile güncelliyoruz ve bir sorunla karşılaştık.

Yeni sunucuda, bazı eski yordamlar yürütülürken eski kodumuza "nesne kapatıldığında işleme izin verilmiyor" mesajı verilir. Bu ileti eski sunucuda hiç görünmedi. İzlediğimizde SET NOCOUNT ON;, saklı yordama eklenerek sorun çözülebilir .

Veritabanındaki varsayılanlara baktım ve varsayılanlarla ilgili farklı hiçbir ayar görmedim (SQL Server 2008 vs SQL Server 2014).

SET NOCOUNT ONBin tane kayıtlı proca eklemeye gerek kalmadan bunu küresel olarak çözmek için hangi ayara bakmalıyım ?


2
Saklanan tüm yordamlar, kullanıcı seçeneklerine güvenmekten çok daha güvenli olan, güvendiğiniz davranışı belirtmelidir. Her saklı yordamın her zaman SET NOCOUNT ON;, her zaman başlaması gerektiğini bile iddia edebilirim .
Aaron Bertrand

@AaronBertrand katılıyorum; üzerinde çalıştığım son projede sayım yapmayan bir şablon vardı, ancak bu şu anda bu projede bir seçenek değil
UnhandledExcepSean

Saklanan tüm yordamları değiştirmek için komut dosyası yazabileceğinizi ve saklı yordamın SET NOCOUNT ON;başlangıcına (sonra BEGIN) ekleyebileceğinizi unutmayın . Saklı yordamların sayısı gerçekten bir sorun olmamalıdır.
Erik A

1
@ Erik-A - saklı bir yordamın başladığından emin olamazsınız BEGIN- güzel, ama gerekli değil.
Max Vernon

Yanıtlar:


16

SQL Server Konfigürasyonu, sistem saklı yordamı user optionskullanılarak ayarlanabilen , uygun şekilde adlandırılan bir seçeneğe sahiptir sp_configure. SQL Server Science'da kullanıcı seçeneklerini nasıl inceleyip ayarlayacağımı gösteren bir blog yazısı yazdım .

Kısaca, bunu kullanarak eski sunucudan "config değeri" alabilirsiniz:

EXEC sys.sp_configure 'user options';

Ardından, yeni sunucuyu aynı seçenekleri kullanacak şekilde ayarlayın:

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

(<config value> 'u eski sunucudaki değerle değiştirin).


Nedeni neredeyse budur (şimdi onay beklemektedir). Eski sunucunun değeri MS'e göre NOCOUNT olan 512 değerine sahipti ( docs.microsoft.com/en-us/sql/database-engine/configure-windows/… ). Sadece @@ OPTIONS
UnhandledExcepSean

Bu kesinlikle doğru. Eğer SET NOCOUNT ONçözer 512'ye konu, ayar kullanıcı seçenekleri bunu çözecektir.
Max Vernon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.