3

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

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

4

2 回答 2

5

不,SqlDependency 需要 SqlCommand 才能执行。

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

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

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

于 2011-12-27T21:14:04.650 回答
0

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

使用带有每次拉取数据时都会更改的参数的存储过程。例如:

Alter PROCEDURE someschema.SQLDependency_DC_PRE
    @MaxDCIdx INT = 1
AS

SELECT DCIdx FROM someschema.DC_PRE WHERE DCIdx >= @MaxDCIdx ORDER BY DCIdx DESC;

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

于 2013-11-07T15:18:05.537 回答