是否可以在C#中为C#运行SqlDependency
而不执行查询?
我有一些表可以增长得相当大。在表中执行查询以判断行是否已更改可能需要很长时间。
答案 0 :(得分:5)
不,SqlDependency需要执行SqlCommand。
如果性能有问题,您可以考虑替代设计,例如向要监视的表添加触发器,并在每次更改行时写入提取表,然后让SqlDependency监视提取表。
如果原始表中更改的任何行应该触发依赖项,那么您的提取表可能就像包含已更改行数的计数器的单个行一样简单。当此值更改时,将触发依赖项。
或者,提取表可以只包含表中任何行更改的最后日期/时间的时间戳。
答案 1 :(得分: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负载不变。