Sql-Server

觸發並忘記 SQL 觸發器?

  • August 1, 2015

我有一個使用 SQL Server 作為後端的第 3 方應用程序。具體來說,我們在 SQL Server 2000、SQL Server 2008 和 SQL Server 2008R2 上有它。任何解決方案都必須對所有人可用,但僅針對某些人的解決方案仍會引起人們的興趣。

該應用程序是定制的,不受支持,供應商不再存在。我想要做的是當它寫一個插入時有一個觸發器來讀取那個插入並開始一個複雜的過程。但是,應用程序在 SQL 插入完成之前不會返回焦點,這意味著長時間的觸發器將導致應用程序認為 SQL Server 沒有響應並取消/回滾事務。

是否有任何類型的觸發器會立即“釋放”然後繼續處理?或者我可以在 SQL Server 內部實現的其他一些解決方案。

我想我會建立一個帶有某種隊列的表,並有一個工作輪詢該表並拿起它必須執行的任何工作。

因此,例如,您的觸發器在名為 processqueue 的表中寫入記錄 id,然後您有一個作業從 processqueue 表中提取所有記錄,並為每條記錄執行繁重的工作,一旦完成就從隊列中刪除記錄。

根據延遲要求安排該作業執行

即使使用 SQL 2000 服務代理仍然是您的答案。我不打算在這裡討論如何設置服務代理解決方案,因為老實說這很複雜,而且我只做過一次。

話雖如此,請在 2008 和 2008 R2 中設計您的服務代理系統。對於您的 2000 系統,在您的 2008 R2 系統之一上設計第二個 SB 系統(讓我們使用您擁有的最先進的工具)。讓您的 2000 系統中的觸發器簡單地插入到 2008 R2 上的表中,該表控制 SB 系統以獲取 2000 數據。它可以在本地進行複雜的處理,然後將數據推送回 2000 系統。是的,這有點做作,但只要係統靠得很近(它們之間的網路速度很快),您的觸發速度應該足夠快以滿足您的應用程序,並且數據應該足夠快地寫回以滿足該方面的任何要求事物。

以下是服務代理上的一些連結,可幫助您入門。

引用自:https://dba.stackexchange.com/questions/108429