4

SqlDependencyを使用して、特定のデータベース テーブルの変更を警告するメカニズムを実装しました。

しかし、これは、SqlDependency を実装したデータベース テーブルを更新する既存の機能を壊します。

次のエラーが表示されます。

次の SET オプションの設定が正しくないため、UPDATE は失敗しました: 'QUOTED_IDENTIFIER'。計算列のインデックス付きビューやインデックス、フィルター選択されたインデックス、クエリ通知、XML データ型メソッド、空間インデックス操作で使用する SET オプションが正しいことを確認します。

これは、「sqldependency-causes-error-in-other-application」に似ています。

テーブルの更新を実行する proc が QUOTED_IDENTIFIER を OFF に設定して作成されていることがわかりました。これが問題の正確な原因です。

「 SET QUOTED_IDENTIFIER ON 」でプロシージャを変更すると、すべてが完璧に機能します。しかし、すべてのプロシージャを検索して変更する必要があるため、これは実行可能なソリューションではありません。

私が知りたいのは、アプリケーションのコードから proc が実行される前に毎回 "SET QUOTED_IDENTIFIER ON" を呼び出す一般的な方法があることです。

私のアプリケーションは ASP.Net 4 Web アプリであり、データベース操作を実行するために Microsoft Enterprise Library 5.0 を使用しています。次のコンポーネントを使用しています: Microsoft.Practices.EnterpriseLibrary.Data.Database

SqlDependency の代替ソリューションも歓迎します。

[編集済み] SQL Server 2008 で、proc を変更せずに QUOTED_IDENTIFIER を true に直接設定する直接的な方法もあります。私が考えているのは、(sp_depends を使用して) そのテーブルに依存するすべてのオブジェクトに QUOTED_IDENTIFIER を設定するスクリプトを作成することです。

4

1 に答える 1

1

あなたがまだそれを探しているなら別の方法がありますが、確かにそれは最も自己文書化されていません。

EXEC sys.sp_configure N'user options', N'256'
GO
RECONFIGURE WITH OVERRIDE
GO

これは、データベースを右クリックして [プロパティ]、[接続] に移動し、リストから引用符で囲まれた識別子を選択した場合の SSMS の動作です。これにより、SQL Server はすべての着信接続に対して引用符付き識別子オプションをオンに設定します。

于 2013-10-23T02:08:48.070 に答える