0

我需要在一臺服務器上創建一個觸發器,以便在某個表更改時觸發,之後我必須對數據進行一些計算,以便導入(不是隻是將其複製到另一臺服務器上的另一個表中)。當觸發器觸發時,將數據從不同的SQL Server導入到另一臺服務器

此外,我只想導入未通過早期觸發器導入的新數據。

我該怎麼辦?

+0

您使用的是哪個版本的SQL Server? – gangreen 2012-03-03 19:22:12

+0

數據是否需要實時注入到其他服務器?如果可能有延遲,你的容忍度是多少? 5秒?一分鐘? – 2012-03-03 20:03:40

+0

SQL Server 2008R2。我們可以忍受10秒的延遲。 – synepis 2012-03-04 01:45:40

回答

0

創建Linked Server到您的目標服務器,然後使用MERGE語句根據目標表中的記錄的存在執行操作。
雖然我不會創建引用遠程服務器的觸發器,但它可能會影響性能和可靠性。如果您想要實現較小的延遲並使更新可靠,請考慮使用Service Broker

+0

如果沒有觸發器,您怎麼知道何時合併? – synepis 2012-03-03 19:45:24

+0

仍然會有一個觸發器,但不會將數據同步寫入遠程服務器,它會將更改後的數據發送到Service Broker,然後該Service Broker會異步處理。 – Tomek 2012-03-03 20:39:07

0

您可以在兩個SQL Server之間創建鏈接服務器,以便將數據從一個發送到另一個。

要創建一個鏈接服務器,您需要使用系統存儲過程sp_addlinkedserver,您也可以通過SQL Server Management Studio執行此操作。我相信。

下面是一個例子,你可以嘗試:

EXECUTE sp_addlinkedserver @server=N'serverip/hostname', @provider=N'SQLNCLI' 

如果您可以查看鏈接的服務器已被查詢sys.servers

創建

可以查詢語法如下鏈接的服務器數據庫:

SELECT x 
FROM [linkedservername].[database].[schema].[table] 

的更多信息:http://msdn.microsoft.com/en-us/library/ff772782.aspx

用於觸發器僅更新以前未處理的數據。有很多方法可以做到這一點。如果您的源表格包含「更新日期」類型列,則可以基於此列來完成。或者,如果你的表有一個標識列,並且你想增量複製數據,你可以在表中存儲每次都複製的'last id',然後在下次運行觸發器時,你可以告訴它從那個開始id + 1這種方式行只傳送一次。