2016-08-03 9 views
-1

我正在使用SSDT創建數據填充腳本。 SSDT爲表中的每一行創建一個INSERT語句。尋找一種同步查找表數據而不是創建INSERT狀態表的工具

問題是,某些查找數據行已經存在於目標數據庫中。所以INSERT語句會產生PK違例錯誤。

此外,一些行需要更新,而不是INSERT。

是否有任何工具(希望免費),允許我同步(或合併)查找數據。沒有這個工具,我的數據填充腳本將會非常具有挑戰性和耗時。

回答

1

使用sp_generate_merge生成您放入部署後腳本中的腳本。

埃德

+0

它看起來很有希望。如果我使用INSERT語句將數據填充到#TempTable中,我可以使用sp_generate_merge將更改填充到目標生產表中嗎? –

+1

sp_generate_merge - https://github.com/readyroll/generate-sql-merge –

0

來自RedGate的SQL數據比較是一個,可作爲30天免費試用版。您可以使用GUI ad-hoc或命令行界面來自動更新。該產品並非沒有缺點,但它可能非常有用。

0

如果使用SSDT來填充查找表,不單獨使用INSERT,UPDATE和DELETE語句,使用MERGE代替:

merge into dbo.Colors as target 
using (
    values 

    -- Id , Code  , Name         

    ( 1 , 'RED'  , N'Red'  ), 
    ( 2 , 'YELLOW' , N'Yellow' ), 
    ( 3 , 'GREEN'  , N'Green' ), 
    ( 4 , 'BLUE'  , N'Blue' )   

) as source (Id, Code, Name) on target.Id = source.Id 

when matched then 
    update set 
     Code = source.Code , 
     Name = source.Name 

when not matched by target then 
    insert (Id, Code, Name) 
    values (Id, Code, Name) 

when not matched by source then 
    delete; 
+0

這個想法很棒。我有更多15個查找表來同步或填充。您是否建議手動編寫所有合併報表? –

+0

MERGE是該任務的最佳解決方案。我們將所有查找表腳本保存在MERGE語句中。 –

+0

對許多查詢表進行手工編碼似乎不切實際,且效率不高。你是否手工編碼所有合併聲明? –