2010-12-02 16 views
0

SQL依存関係イベント(SQL 2008)を作成した他の誰かのコードで作業する。私はひどく馴染んでいませんでしたので、いくつかの読書といくつかのテストをしていました。データベース変更時にSQL依存関係イベントが発生するが、テーブル変更には反映されない

イベントはCustomerServicesTable_OnChangeと呼ばれ、おそらくcustomerServicesテーブルが変更されたときに発生することになります。しかし、DBをコード(Entity Frameworkを使用しています)で変更すると、イベントは発生しません。

私はSQL Server Managerを起動し、テーブルに対して直接クエリを実行して何が起こるかを調べました。表に対してUPDATE、INSERTまたはALTER問合せを実行しても、イベントは発生しませんでした。そのSQLの依存関係を確認するには

は、私は、データベースに対して、次のコマンドを実行したサービスを実現する上でおそらく最初のステップ有効化されていた:これらのコマンドを実行している驚いたことに

ALTER DATABASE customers SET SINGLE_USER with rollback immediate 
alter database customers set enable_broker 
ALTER DATABASE customers SET MULTI_USER 

をイベントを発生させました!

したがって、依存関係は、データベース全体、またはCustomerServices以外のDBのテーブルに対して動作しているかのように見えます。誰かが、問題の内容を正確に判断するのに役立つ方法を提案できますか?

EDIT:イベントを発生させるのはALTER DATABASEコマンドではなく、SET SINGLE_USERがエラーを引き起こすことがわかりました。しかし、私はこの問題に多大な影響を与えません。

乾杯、 マット

答えて

0

最後にこの1つが働いて得た:データベース所有者は、SQL Serverアカウントに設定する必要が

1)

Windows管理者アカウントの代わりに。

2)ウォッチサービス(通知サービスを開始するために発行されたSQLコマンド)は、監視しているデータベースの更新に使用されるのと同じユーザーアカウントで設定する必要があります。

私はたくさんの許可の仕事をしましたが、私はそれらを機能させるための2つの重要な問題だと思います。

0

SqlDependencyがどのように機能するかを理解するために、この最初のを読む:The Mysterious Notificationを。

sys.transmission_queueに通知があり、transmission_statusが表示されている可能性があります。

暗闇の中でショット:DBOは、SIDを無効にマップされます。

ALTER AUTHORIZATION ON DATABASE::customers to sa; 
+0

提案していただきありがとうございます。ただし、通知用のサポートは、使用しているSQL Server 2008では削除されているように見えます。ポップアップエラーは赤いニシンのようです。 –

+0

クエリ通知は、SQL Server 2008以降のバージョンから削除されていません**、廃止予定のパスにはありません。あなたはNotifications Servicesについて話していますが、これはまったく異なる、関係のない機能です。 ASPキャッシュの依存関係とSqlDependencyはクエリ通知を使用し、Notification Servicesとは何の関係もありません。 –

+0

ポインタをありがとう。私はあなたの記事を読んで、MSのチュートリアルを順を追って説明しました。コードを複製するだけで、私はMSの提案と全く同じことをしていますが、サイコロはありません。サービスは機能していません。それが許可されている場合、チュートリアルのCanRequestNotifications()関数が問題を捕捉しないでしょうか? –

関連する問題