不执行查询的SqlDependency

本文关键字:SqlDependency 查询 执行 | 更新日期: 2023-09-27 18:18:50

是否可以在Sql Server中运行SqlDependency而不执行查询?

我有一些表可以变得相当大。跨表执行查询来判断一行是否已更改可能需要很长时间。

不执行查询的SqlDependency

不,SqlDependency需要SqlCommand来执行。

如果性能是一个问题,您可以考虑其他设计,例如向要监视的表添加一个触发器,并在每次一行更改时写入提取表,然后让SqlDependency监视提取表。

如果原始表中的任何一行更改都应该触发依赖项,那么您的提取表可以像包含已更改行数计数器的单行一样简单。当这个值改变时,依赖项将被触发。

或者,提取表可以只包含表中任何一行被更改的最后日期/时间戳。

接受的答案有效,但如果您处于不能(或不想)使用触发器的位置,则有另一种选择。

使用具有每次提取数据时更改参数的存储过程。例如:

Alter PROCEDURE someschema.SQLDependency_DC_PRE
    @MaxDCIdx INT = 1
AS
SELECT DCIdx FROM someschema.DC_PRE WHERE DCIdx >= @MaxDCIdx ORDER BY DCIdx DESC;

那么您可以确保每次只返回一行,这样只要查询是在主键或索引字段上,就可以降低SQL负载。