以下查询适用于SQLDependency(例如,传递给ExecuteNonQuery中的this question):
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。)
但是,这不起作用:使用SqlNotificationEventArgs立即调用SqlDependency OnChange处理程序,其属性Info = Invalid,Source = Statement,Type = Subscribe。
我知道有restrictions这样的查询可能是什么,但据我所知,上述内容并未违反其中任何一项?除非DateTime2以某种方式限定为限制的“双重/实际”“语句必须没有基于双/实数据类型的比较或表达式”?
答案 0 :(得分:0)
虽然这不能回答查询无效的原因,但我发现了一个不同的查询,它可以运行并且不会向客户端返回大量数据。根据{{3}}的建议,即使上面链接的文档另有说明,您也可以使用COUNT_BIG(*)而不使用 GROUP_BY!也就是说,以下工作:
SELECT COUNT_BIG(*) FROM dbo.SomeTable WHERE Col1 = 'Foo' AND Col2 = 'Bar'
答案 1 :(得分:0)
原因可能是因为您在where子句中使用了DateTimeUtc。