1

我有一个每天一次的摄取案例,其中我将通过 FTP 获取一个大文件,其中包含 4 个数据库表的最新版本。

对于每张桌子,我想:

  1. 截断暂存数据库中的表
  2. 将 FTP 文件 BCP 到该表中
  3. 查找暂存表和生产表之间的差异 (IUD)
  4. 将任何所需的宫内节育器制作到生产表中,使其与临时表匹配

我确信这是一个相当普遍的问题,但我不能 100% 确定解决它的最佳方法。

是否有针对此类问题的任何内置 T-SQL 功能,还是我只需要进行各种连接来查找插入/更新/删除的记录并手动执行它们?我确信我可以通过第二种方式做到这一点,但是任何建议都非常感谢(不寻找工作代码)。

4

2 回答 2

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

这对我有帮助。

于 2012-09-28T15:53:53.620 回答
0

RedGate 的 SQL Compare 产品具有自动化功能。

http://downloads.red-gate.com/HelpPDF/ContinuousIntegrationForDatabasesUsingRedGateSQLTools.pdf

(我与 redgate 无关。我什至不太喜欢他们的产品,但它似乎适合这种情况)

于 2012-08-09T14:26:47.050 回答