【问题标题】:Is there a way to find out which records have changed in an indexed view?有没有办法找出索引视图中哪些记录发生了变化?
【发布时间】:2021-11-07 13:46:25
【问题描述】:

我有一个表 (invoice details),它有两列 (productidquantity)。为了了解产品的余额,我在此表上创建了一个索引视图。

当用户在计算机上输入发票时,我想在另一台计算机上刷新产品余额,因此我需要知道索引视图中的哪些行发生了更改。

【问题讨论】:

  • 没有办法 - 您的视图聚合值(大概),因此您无法知道哪些行发生了变化。事实上,您可能会遇到这样一种情况,即给定发票的多个明细行发生了变化,但小计金额保持不变。或者删除一个明细行并插入一个新行(无论小计是否更改)。您是否在这里做出了有效的假设?
  • 谢谢 现实场景比我提到的例子要复杂。但我只是想知道了解索引视图变化的可能性。

标签: sql-server indexed-view


【解决方案1】:

事务复制允许您复制Indexed Views as Tables。这将跟踪索引视图的更改并将其应用于订阅者,订阅者在订阅者数据库中拥有索引视图数据的副本作为表。

【讨论】:

    【解决方案2】:

    没有办法。您(定期)拉动并更新。我见过的任何需要分发数据更新的应用程序都不是通过从 SQL Server 更新来做到这一点的,而是通过在应用服务器实现的自己的数据馈送上发送更新来做到这一点 - 主要是股票交易应用程序。

    SQL Server 没有这方面的功能,我见过的几乎每个数据库访问层也没有。您可以定期(每 X 秒)或在用户按下更新按钮时拉取和更新客户端表示。

    【讨论】:

    • 这是我现在所做的,但是如果索引视图很多,那就很累了。无论如何,谢谢您的宝贵回答
    猜你喜欢
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多