2016-06-12 180 views
-2

我正在使用此代碼,但上面顯示了錯誤消息。爲什麼這麼做? 我還創建鏈接的服務器到第二的PC鏈接名稱= 192.168.1.101還用戶名= XXXX和密碼= XXXXMERGE語句必須以分號(;)結尾

WITH Source AS 
    (SELECT id, name FROM Tamio.dbo.memberform WHERE active = 1 or active =0) 
MERGE INTO [192.168.1.101].Imatismos.dbo.customermaster AS target 
    USING Source ON target.id = source.id 
    WHEN MATCHED THEN UPDATE SET target.name = source.name 
    WHEN NOT MATCHED THEN INSERT (id, name) VALUES (source.id, source.name) 
+2

當目標表是遠程表時,不能使用合併。不確定此限制是否已在Sql Server 2014/2016中解除,但就Sql Server 2012而言,這在MSDN中進行了說明。在這一點上,我建議放棄合併方法,並使用一個存儲過程與單獨的步驟來執行您的UPDATE或INSERT – Steve

+0

有沒有其他辦法,我可以成功呢? – user6453809

+0

將所有表格轉移到另一臺PC-B(遠程)表格並將兩張表格合併到PC-B中是否正確? – user6453809

回答

-1

一種方法是你的所有源數據複製到staging table並隨後對其進行處理:

1)複製數據

INSERT INTO Imatismos.stg.memberform 
SELECT id, name 
FROM Tamio.dbo.memberform WHERE active = 1 or active = 0 

2)實際的合併可以在本地進行(這是運行在[192.168.1.101] .Imatismos)

WITH Source AS 
    (SELECT id, name FROM stg.memberform) 
MERGE INTO dbo.customermaster AS target 
    USING Source ON target.id = source.id 
WHEN MATCHED THEN UPDATE SET target.name = source.name 
WHEN NOT MATCHED THEN INSERT (id, name) VALUES (source.id, source.name); 

一般來說,儘量避免runn在多個服務器上「加入」的查詢,因爲這可能會導致非常差的性能。

+1

這不是所問問題的答案。如果OP有跟進問題,他們應該問一個新問題。 –

3

在您的合併聲明的末尾加上一個分號!

WITH Source AS 
    (SELECT id, name FROM Tamio.dbo.memberform WHERE active = 1 or active =0) 
MERGE INTO [192.168.1.101].Imatismos.dbo.customermaster AS target 
    USING Source ON target.id = source.id 
    WHEN MATCHED THEN UPDATE SET target.name = source.name 
    WHEN NOT MATCHED THEN INSERT (id, name) VALUES (source.id, source.name); 
+0

現在我收到以下消息:MERGE語句的目標不能是遠程表,遠程視圖或遠程表上的視圖。 – user6453809

+0

閱讀文檔:https://msdn.microsoft.com/en-US/library/bb510625.aspx - > * target_table不能是一個遠程表。* –

+1

@ user6453809這是一個不同的問題,問一個關於SO的問題'創建某種幫助臺,人們可以在其中解決所有相關問題。 –

相關問題