2011-12-27 67 views
3

是否有可能在不执行查询的情况下在C#中为Sql Server运行SqlDependencySqlDependency不执行查询

我有一些表可以增长相当大。在表中执行查询以判断某行是否已更改可能需要很长时间。

+0

有一个网站可以帮助你回答这个问题http://msdn.microsoft.com/en-us/library/62xk7953(VS.80).aspx本网站将向用户展示如何在需要时订阅活动检查sqlDependency – MethodMan 2011-12-27 21:12:45

+0

我有一个工作的SqlDependency设置。我只是想知道是否有办法做到这一点,而不执行“command.ExecuteResult()”命令。我已经将它设置为与“command.ExecuteNonQuery()”一起工作,该工作正常,但当表有数百万行重新执行时,它仍然变慢。 – Stuart 2011-12-27 21:14:34

回答

5

不,SqlDependency需要一个SqlCommand来执行。

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

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

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

+0

好吧。这正是我需要的。谢谢。 – Stuart 2011-12-27 21:17:42

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的查询是一个主键或索引字段,只要加载了下来。