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 を設定するスクリプトを作成することです。