是否可以SqlDependency
在 C# 中为 Sql Server 运行而不执行查询?
我有一些可以变得相当大的表。跨表执行查询以判断行是否已更改可能需要很长时间。
是否可以SqlDependency
在 C# 中为 Sql Server 运行而不执行查询?
我有一些可以变得相当大的表。跨表执行查询以判断行是否已更改可能需要很长时间。
不,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 负载。