使用别人的代码,他们已经建立了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导致错误的事实。虽然不能帮我解决这个问题。
干杯, 马特
答案 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命令)需要设置在用于创建您正在查看的数据库更新的同一用户帐户上。
我做了很多权限工作,但我认为这是使它工作的两个关键问题。