Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL依赖关系事件在Alter数据库上触发,但在表更改上不触发_Sql_Sql Server_Sqldependency - Fatal编程技术网

SQL依赖关系事件在Alter数据库上触发,但在表更改上不触发

SQL依赖关系事件在Alter数据库上触发,但在表更改上不触发,sql,sql-server,sqldependency,Sql,Sql Server,Sqldependency,处理其他人的代码,他们在其中建立了SQL依赖事件(SQL 2008)。我不是很熟悉,所以我只是做了一些阅读和测试 该事件称为CustomerServicesTable_OnChange,因此可能意味着在customerServices表发生更改时触发。但是,当DB通过代码更改时(我们使用的是实体框架),事件不会触发 出于好奇,我启动了SQLServerManager,并尝试直接对表运行查询以查看会发生什么。对表运行UPDATE、INSERT或ALTER查询不会引发事件 为了检查是否启用了SQL依

处理其他人的代码,他们在其中建立了SQL依赖事件(SQL 2008)。我不是很熟悉,所以我只是做了一些阅读和测试

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

出于好奇,我启动了SQLServerManager,并尝试直接对表运行查询以查看会发生什么。对表运行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导致错误的事实。但这对我解决这个问题没有多大帮助

干杯,
Matt

请先阅读以下内容以了解SqlDependency的工作原理:

可能是通知堆积在一起,
transmission\u status
会指出发生这种情况的原因

黑暗中的快照:dbo映射到无效SID:

ALTER AUTHORIZATION ON DATABASE::customers to sa;

请先阅读以下内容以了解SqlDependency的工作原理:

可能是通知堆积在一起,
transmission\u status
会指出发生这种情况的原因

黑暗中的快照:dbo映射到无效SID:

ALTER AUTHORIZATION ON DATABASE::customers to sa;

终于解决了这个问题:

1) 数据库所有者需要设置为SQL Server帐户,而不是Windows管理员帐户

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


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

最终解决了这个问题:

1) 数据库所有者需要设置为SQL Server帐户,而不是Windows管理员帐户

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


我做了很多权限方面的工作,但我认为这是使其发挥作用的两个关键问题。

谢谢你的建议。然而,我们正在使用的SQL Server 2008似乎已经删除了对通知的支持。弹出的错误似乎是一种误导。查询通知未从SQL Server 2008或任何更高版本中删除,并且不在弃用路径上。您所说的是通知服务,它是一种完全不同的、不相关的功能。ASP缓存依赖项和SqlDependency使用查询通知,与Notification Services没有任何关系。感谢您提供的指针。我已经阅读了你的文章,并且一步一步地阅读了MS教程,在它的整体中复制代码,只是为了确保我所做的与MS建议的完全相同,但没有风险:服务就是不工作。如果是权限,教程中建议的CanRequestNotifications()函数不会发现问题吗?谢谢你的建议。然而,我们正在使用的SQL Server 2008似乎已经删除了对通知的支持。弹出的错误似乎是一种误导。查询通知未从SQL Server 2008或任何更高版本中删除,并且不在弃用路径上。您所说的是通知服务,它是一种完全不同的、不相关的功能。ASP缓存依赖项和SqlDependency使用查询通知,与Notification Services没有任何关系。感谢您提供的指针。我已经阅读了你的文章,并且一步一步地阅读了MS教程,在它的整体中复制代码,只是为了确保我所做的与MS建议的完全相同,但没有风险:服务就是不工作。如果它是一个权限,那么教程中建议的CanRequestNotifications()函数不会发现这个问题吗?