アップグレード後のSQL呼び出しの処理中のSET NOCOUNTエラー


13

新しいサーバーと更新されたバージョンのMicrosoft SQL Serverを使用してテスト環境をアップグレードしていますが、問題が発生しています。

新しいサーバーでは、一部のストアドプロシージャを実行すると、古いコードに「オブジェクトが閉じられているときは操作が許可されません」が表示されます。このメッセージは古いサーバーには表示されませんでした。追跡するSET NOCOUNT ON;と、ストアドプロシージャに追加することで問題を解決できます。

データベースのデフォルトを調べましたが、デフォルトに関連する異なる設定(SQL Server 2008とSQL Server 2014)はありませんでした。

SET NOCOUNT ON1000のストアドプロシージャに追加する必要なく、これをグローバルに解決するには、どの設定を検討する必要がありますか?


2
すべてのストアドプロシージャは、ユーザーオプションに依存するよりもはるかに安全な、依存する動作を指定する必要があります。私は潜在的に、すべてのストアドプロシージャは常にで始まる必要があるとさえ主張しますSET NOCOUNT ON;
アーロンバートランド

@AaronBertrand同意します。私は上のNOCOUNTを設定していた持っていたテンプレートにあったが、それはこの時点では、このプロジェクトではオプションではありません最後のプロジェクト
UnhandledExcepSean

スクリプトを記述して、すべてのストアドプロシージャを変更し、ストアドプロシージャSET NOCOUNT ON;の開始時(後にBEGIN)に追加できることに注意してください。ストアドプロシージャの数は、実際には問題になりません。
エリックA

1
@ Erik-A-ストアドプロシージャが始まることを確信することはできませんBEGIN-それは素晴らしいですが、必須ではありません。
マックスヴァーノン

回答:


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>を古いサーバーの値に置き換えます)。


それがほぼ間違いなく原因です(今は確認待ちです)。古いサーバーの値は512で、MSによるとNOCOUNTです(docs.microsoft.com/en-us/sql/database-engine/configure-windows/…)。@@ OPTIONS
UnhandledExcepSean

それは間違いなく正しい。SET NOCOUNT ON問題を解決する場合、ユーザーオプションを512に設定すると修正されます。
マックスヴァーノン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.