2012-08-09 89 views
1

我有一天一次的提取情況,其中我將通過包含4個數據庫表的最新版本的FTP來獲取大文件。有效應用兩個SQL Server表之間的差異

對於每個表,我想:在臨時數據庫

  1. 截斷表
  2. BCP的FTP'd文件到該表臨時表之間
  3. 查找diff文件(IUD)生產表
  4. 製作任何所需的宮內節育器到生產表,以便它與分期表匹配

我確定這是一個相當普遍的問題,但我並不是100%確定接近它的最佳方法。

是否有任何內置的T-SQL功能用於這類問題,還是我只需要執行各種連接來查找插入/更新/刪除的記錄並手動執行它們?我確信我可以設法以第二種方式來做到這一點,但任何建議都非常感謝(不尋找工作代碼)。

+1

查看['merge'](http://technet.microsoft.com/en-us/library/bb510625.aspx)。 – 2012-08-09 14:00:20

回答

1

因爲從來沒有人把它作爲真正的答案,Mikael Eriksson在評論中提到的MERGE命令是正確的選擇,它效果很好。

這裏有一個簡單的使用例子:

MERGE dbo.DimProduct AS Target 
USING (SELECT ProductID, ProductName, ProductColor, ProductCategory FROM dbo.StagingProduct) AS Source 
ON (Target.ProductID = Source.ProductID) 
WHEN MATCHED THEN 
    UPDATE SET Target.ProductName = Source.ProductName 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (ProductID, ProductName, ProductColor, ProductCategory) 
    VALUES (Source.ProductID, Source.ProductName, Source.ProductColor, Source.ProductCategory) 
OUTPUT $action, Inserted.*, Deleted.*; 

來自:http://www.bidn.com/blogs/bretupdegraff/bidn-blog/239/using-the-new-tsql-merge-statement-with-sql-server-2008

這幫助了我。