SQL依赖项事件在Alter Database上触发,但不在Table更改上触发

时间:2010-12-02 11:26:54

标签: sql sql-server sqldependency

使用别人的代码,他们已经建立了SQL依赖事件(SQL 2008)。不是我非常熟悉的东西,只是做了一些阅读和一些测试。

该事件称为CustomerServicesTable_OnChange,因此可能会在customerServices表发生更改时触发。但是,当通过代码更改数据库(我们正在使用实体框架)时,事件不会触发。

出于好奇,我启动了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之外的数据库中的表。任何人都可以建议前进的方法来帮助我确切地确定问题是什么吗?

编辑:我发现不是导致事件触发的ALTER DATABASE命令,而是SET SINGLE_USER导致错误的事实。虽然不能帮我解决这个问题。

干杯, 马特

2 个答案:

答案 0 :(得分:0)

首先阅读本文,了解SqlDependency的工作原理:The Mysterious Notification

通知可能会在sys.transmission_queue中堆积,而transmission_status会表明这种情况发生的原因。

在黑暗中拍摄:dbo映射到无效的SID:

ALTER AUTHORIZATION ON DATABASE::customers to sa;

答案 1 :(得分:0)

最后得到了这个:

1)数据库所有者需要设置为SQL Server帐户而不是Windows Admin帐户。

2)监视服务(即用于启动通知服务的SQL命令)需要设置在用于创建您正在查看的数据库更新的同一用户帐户上。

我做了很多权限工作,但我认为这是使它工作的两个关键问题。