Man*_*eld 0 .net sql-server service-broker sqldependency
我有一个使用 SQLDependency 的应用程序。我想在插入新行时向用户显示插入到数据库表中的最新行。
当我的查询是一个简单的 select 语句时,这按预期工作,但鉴于我想显示最近插入的行,我将查询编写为SELECT TOP语句。这导致了多个异常。回顾这个问题后,我了解到这TOP对 SQLDependency 无效,因此我必须找到其他一些解决方案。
这让我想知道两件事:
A) SQLDependency 不支持TOP表达式的原因是什么?
B)我想出的解决方案是根据 id 对结果进行排序并只显示最后一个。这工作正常,但我的表目前只有很少的行。我正在使用数据集,所以我预计它会在插入更多行后变慢 - 这就是为什么我想将查询限制为仅最近的行。有一个更好的方法吗?
本文解释了 Query Notifications 技术如何利用索引视图技术,因此它具有相同的限制。为了创建高效的索引视图,必须能够仅从当前更新中更新索引,而无需查看表中的任何其他行。如果 TOP 将被允许,那么百万美元的问题是:如果您删除 TOP中的一行,哪一行应该取代它?回答这个问题需要在表中搜索现在应该包含在 TOP 索引视图中的另一行,而不是已删除的行。因此,包含 TOP(或者,就这一点而言,存在相同问题的 MAX 或 MIN)的索引视图不能有效维护并且不被允许。
您可以通过查询来检测是否插入了一行COUNT_BIG(*)。一旦您收到计数已更改的通知,查询新插入的行就很简单了。您还将收到有关 DELETES 的通知(即误报)。