1

在其他人的代码上工作,他们已经建立了 SQL 依赖事件 (SQL 2008)。不是我非常熟悉的东西,所以只是做一些阅读和一些测试。

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

出于好奇,我启动了 SQL Server 管理器并尝试直接对表运行查询以查看会发生什么。对表运行 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 导致错误的事实。虽然对我的问题没有多大帮助。

干杯,马特

4

2 回答 2

1

终于搞定了这个:

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

2) 监视服务(即发出的用于启动通知服务的 SQL 命令)需要设置在与您正在监视的数据库更新相同的用户帐户上。

我做了一堆权限工作,但我认为这是使其工作的两个关键问题。

于 2010-12-08T09:45:37.127 回答
0

首先阅读此内容以了解 SqlDependency的工作原理:神秘通知

可能通知正在堆积,sys.transmission_queuetransmission_status将表明为什么会发生这种情况。

黑暗中的一枪:dbo 映射到无效的 SID:

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