1

SQL 依存関係イベント (SQL 2008) を設定した他のユーザーのコードに取り組んでいます。私がよく知っていることではないので、読んでテストしただけです。

このイベントは 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 内のテーブルに対して機能しているように見えます。問題が何であるかを正確に判断するのに役立つ方法を誰かが提案できますか?

編集:イベントが発生する原因となっているのは ALTER DATABASE コマンドではなく、SET SINGLE_USER がエラーを引き起こすという事実であることを発見しました。しかし、問題の解決にはあまり役立ちません。

乾杯、マット

4

2 に答える 2

1

最後にこれを解決しました:

1) データベース所有者は、Windows 管理者アカウントではなく、SQL Server アカウントに設定する必要があります。

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

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

于 2010-12-08T09:45:37.127 に答える
0

最初にこれを読んで、SqlDependency の仕組みを理解してください: The Mysterious Notification .

おそらく通知が積み重なっておりsys.transmission_queuetransmission_statusこれが発生した理由を示しています。

闇の中のショット: dbo は無効な SID にマップされています:

ALTER AUTHORIZATION ON DATABASE::customers to sa;
于 2010-12-02T16:17:41.533 に答える