代码之家  ›  专栏  ›  技术社区  ›  madlan

监视SQL Server的新行

  •  2
  • madlan  · 技术社区  · 14 年前

    我正在创建一个应用程序,如果在应用程序数据库的表中添加了新行,它会通知用户。最好是为此创建一个触发器,还是直接从应用程序每隔几秒钟检查一次?思想?

    5 回复  |  直到 14 年前
        1
  •  5
  •   Remus Rusanu    14 年前

    Query Notifications . 这是SQL Server的功能,允许在其他用户更改数据时主动将通知推送到客户端。它被称为SqlDependency。您订阅一个查询,当结果集发生更改(行被添加、删除或修改)时,您会收到通知。

    LinqToCache 查询并响应失效通知:

    var query = (from r in ctx.table select r).AsCached(
     "table", new CachedQueryOptions() {
        OnInvalidated = (sender, args) {
          // the query was invalidated, a new row was added!
          // refresh display or notify user
        }
     });
    DisplayRows(query);
    
        2
  •  0
  •   JonH    14 年前

    触发是个更好的主意。

        3
  •  0
  •   Steven A. Lowe    14 年前

    顺便说一句,SQLServer有一个通知服务-但它可能是过度杀伤力

    您可以使用触发器将非常短的通知记录写入另一个表,并轮询该表而不是主表

        4
  •  0
  •   Robin Day    14 年前

    触发器是在添加新行时捕获的最佳方式。

    当然,如果最初的轮询计数很密集的话,您可以让触发器在DB的其他地方更新一个值。

        5
  •  0
  •   MusiGenesis    14 年前

    如果您改为从应用程序进行轮询(每隔几秒钟或每分钟一次或其他),则可以控制通知发送给用户的频率。例如,这可以防止由于添加了数千行新行而导致用户收到数千封电子邮件的情况。