2012-08-09 44 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

这帮助了我。