我有一个使用SQLDependency的应用程序。我希望在插入新行时向用户显示插入数据库表的最新行。
当我的查询是一个简单的select语句时,这可以正常工作,但考虑到我想显示最近插入的行,我将查询写成SELECT TOP
语句。这导致了多个例外。在查看this问题后,我了解到TOP
对SQLDependency无效,因此我必须找到其他解决方案。
这让我想到了两件事:
A)SQLDependency不支持TOP
表达式的原因是什么?
B)我提出的解决方案是根据id排序结果,只显示最后一个。这工作正常,但我的表目前只有很少的行。我正在使用数据集,因此我预计它会在插入更多行时减慢 - 这就是为什么我想将查询限制为仅最新的行。有更好的方法吗?
答案 0 :(得分:4)
This article解释了Query Notifications技术如何利用索引视图技术,因此它具有相同的限制。为了创建有效的索引视图,必须能够仅从当前更新更新索引,而无需查看表中的任何其他行。如果允许TOP,那么百万美元的问题是:如果你删除TOP 中哪一行取代它的行?回答这个问题需要在表中搜索应该包含在TOP索引视图中的另一行,而不是删除的那一行。因此,包含TOP(或者,就此问题,MAX或MIN遇到同样问题)的索引视图无法有效维护,也不允许。
您可以通过查询COUNT_BIG(*)
检测到已插入行。一旦您收到通知计数已更改,查询新插入的行是微不足道的。您还将收到有关DELETES的通知(即误报)。
答案 1 :(得分:0)
@Remus Rusanu解释得很好。您不能将{
"rules": {
"users": {
"$nickname": {
".write": "!data.exists()"
}
}
}
}
关键字用于SQL Command。但是,即使您仍要选择一些TOP
数据,也可以使用以下替代解决方案。
我正在从数据库中选择所有记录,但是我只将10条记录放入列表中,并将此列表返回到仪表板。因此,每次我收到最新的十条记录。
您可以使用当前的SQL命令,而无需使用TOP
关键字。我的是:
SQL命令:
TOP
然后,在您的应用程序中,您可以根据您的最高人数来填写列表。
查看我对以下源代码的评论。
Select [Id], [Name] FROM dbo.CUSTOMER where InsertDate = @InsertDate ORDER BY [ID] DESC;