Kami meningkatkan lingkungan pengujian kami dengan server baru dan versi terbaru dari Microsoft SQL Server dan telah mengalami masalah.
Di server baru, kode lama kami akan mendapatkan "operasi tidak diizinkan ketika objek ditutup" ketika menjalankan beberapa prosedur yang tersimpan. Pesan ini tidak pernah muncul di server lama. Ketika kami melacaknya, masalah dapat diatasi dengan menambahkan SET NOCOUNT ON;
ke prosedur tersimpan.
Saya melihat default pada database dan tidak melihat pengaturan yang berbeda (SQL Server 2008 vs SQL Server 2014) yang terkait dengan default.
Pengaturan apa yang harus saya cari untuk menyelesaikan masalah ini secara global tanpa perlu menambah SET NOCOUNT ON
ribuan procs yang disimpan?
sql-server
sql-server-2008
sql-server-2014
sp-configure
UnhandledExcepSean
sumber
sumber
SET NOCOUNT ON;
, selalu.SET NOCOUNT ON;
pada awal prosedur tersimpan (setelahBEGIN
). Jumlah prosedur tersimpan seharusnya tidak menjadi masalah.BEGIN
- bagus, tetapi tidak diperlukan.Jawaban:
Konfigurasi SQL Server memiliki opsi yang disebut, tepat
user options
,, yang dapat diatur menggunakansp_configure
prosedur yang tersimpan sistem. Saya menulis posting blog tentang SQL Server Science yang menunjukkan cara memeriksa dan mengatur opsi pengguna.Secara singkat, Anda bisa mendapatkan "nilai konfigurasi" dari server lama, menggunakan ini:
Kemudian, atur server baru untuk menggunakan opsi yang sama melalui ini:
(ganti <nilai konfigurasi> dengan nilai dari server lama).
sumber
SET NOCOUNT ON
memecahkan masalah, mengatur opsi pengguna ke 512 akan memperbaikinya.