对SQLDependency的查询无效

本文关键字:无效 查询 SQLDependency | 更新日期: 2024-09-20 03:47:43

以下查询与SQLDependency配合良好(例如,在本问题中传递给ExecuteNonQuery):

SELECT SomeColumn 
FROM dbo.SomeTable 
WHERE Col1 = 'Foo' 
  AND Col2 = 'Bar'

不幸的是,ExecuteNonQuery似乎会将所有匹配的行提取到客户端,即使它只返回一个整数。上面的查询返回的数据太多了,所以我需要减少匹配行的数量。为此,我将上述内容更改为以下内容:

SELECT SomeColumn 
FROM dbo.SomeTable 
WHERE Col1 = 'Foo' 
  AND Col2 = 'Bar' 
  AND DateTimeUtc >= '2013-12-01 12:00:00'

(请注意,DateTimeUtc列的类型为DateTime2。)

但是,这不起作用:SqlDependency OnChange处理程序立即被调用,SqlNotificationEventArgs的属性为Info=Invalid、Source=Statement和Type=Subscribe。

我知道这样的查询可能有一些限制,但据我所知,以上内容没有违反任何限制?除非DateTime2以某种方式符合"语句不能具有基于双/实数据类型的比较或表达式"的限制的"双/实"?

对SQLDependency的查询无效

虽然这不能回答查询无效的原因,但我发现了一个不同的查询,它可以工作,并且不会向客户端返回大量数据。正如本文所建议的,您可以在不使用GROUP_by的情况下使用COUNT_BIG(*),即使上面链接的文档建议使用其他方法!也就是说,以下工作:

SELECT COUNT_BIG(*) FROM dbo.SomeTable WHERE Col1 = 'Foo' AND Col2 = 'Bar'
原因可能是您在where子句中使用了DateTimeUtc。