2016-09-08 64 views
0

當某些表中的某些數據發生更改時,我需要通知我的用戶。有關數據更改的SQL高級通知?

要做到這一點,我知道我可以定義一個觸發另一個表(tb_notification)插入一些數據,並有一個計時器(在.NET應用程序)來檢查表,並顯示一些信息給用戶。

這是一個解決方案。

那麼,有沒有與SQLCLRSQL SMO甚至別的另一種解決辦法?

我不知道太多關於SQLCLRSQL SMO並正在尋找解決方案,選擇處理這個問題的最好辦法。

+0

你的用戶在哪裏(如Windows應用程序,網絡瀏覽器,電話應用程序,Excel等) – adrianm

回答

1

大部分將決定如何最好地通知用戶取決於您正在談論的通知的類型。不過,我不認爲SMO會爲你做任何事,就通知,因爲它實際上是用於與元數據一般交互變得更加容易。

如果你只是想以電子郵件的用戶,你應該通過T-SQL觸發器調用sp_send_dbmail。這個系統存儲過程通過Service Broker異步運行,所以它不會(至少不應該)支持DML語句。

如果您需要調用Web服務,您可以使用通過SQLCLR觸發器或調用SQLCLR函數/存儲過程的T-SQL觸發器來執行此操作。這裏的缺點是,在Web服務調用等待響應時,或者甚至等待發出請求的機會(取決於您配置的最大連接的方式),DML語句掛起的可能性更大。

還具有包括T-SQL觸發轉儲必要的信息放進隊列表的選項,然後有一個SQL Server代理作業運行每分鐘左右來處理該隊列表中的記錄。確保在「處理」後刪除記錄。這個選項自然是異步的,因此通過SQLCLR調用Web Service的風險要小得多。或者這種方法可以與sp_send_dbmail結合使用,以便您可以通過「即時」電子郵件通知加上對隊列表中的數據執行更通用的操作,例如將其發送到通用審計數據庫,以便UI可以添加到更多的「全局」看看,許多人可以通過你的應用程序看到的變化。

相關問題