我正在使用SSDT創建數據填充腳本。 SSDT爲表中的每一行創建一個INSERT語句。尋找一種同步查找表數據而不是創建INSERT狀態表的工具
問題是,某些查找數據行已經存在於目標數據庫中。所以INSERT語句會產生PK違例錯誤。
此外,一些行需要更新,而不是INSERT。
是否有任何工具(希望免費),允許我同步(或合併)查找數據。沒有這個工具,我的數據填充腳本將會非常具有挑戰性和耗時。
我正在使用SSDT創建數據填充腳本。 SSDT爲表中的每一行創建一個INSERT語句。尋找一種同步查找表數據而不是創建INSERT狀態表的工具
問題是,某些查找數據行已經存在於目標數據庫中。所以INSERT語句會產生PK違例錯誤。
此外,一些行需要更新,而不是INSERT。
是否有任何工具(希望免費),允許我同步(或合併)查找數據。沒有這個工具,我的數據填充腳本將會非常具有挑戰性和耗時。
使用sp_generate_merge生成您放入部署後腳本中的腳本。
埃德
來自RedGate的SQL數據比較是一個,可作爲30天免費試用版。您可以使用GUI ad-hoc或命令行界面來自動更新。該產品並非沒有缺點,但它可能非常有用。
如果使用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;
這個想法很棒。我有更多15個查找表來同步或填充。您是否建議手動編寫所有合併報表? –
MERGE是該任務的最佳解決方案。我們將所有查找表腳本保存在MERGE語句中。 –
對許多查詢表進行手工編碼似乎不切實際,且效率不高。你是否手工編碼所有合併聲明? –
它看起來很有希望。如果我使用INSERT語句將數據填充到#TempTable中,我可以使用sp_generate_merge將更改填充到目標生產表中嗎? –
sp_generate_merge - https://github.com/readyroll/generate-sql-merge –