1

4 つのデータベース テーブルの最新バージョンを含む大きなファイルを FTP 経由で取得する 1 日 1 回の取り込みケースがあります。

各テーブルについて、次のことを行います。

  1. ステージング データベースのテーブルを切り捨てる
  2. FTPされたファイルをそのテーブルにBCPします
  3. ステージング テーブルと本番テーブルの間の差分 (IUD) を見つける
  4. ステージング テーブルと一致するように、必要な IUD を本番テーブルに作成します。

これはかなり一般的な問題だと確信していますが、それにアプローチする最善の方法について 100% 確信があるわけではありません。

この種の問題に対して組み込みの T-SQL 機能はありますか、それとも挿入/更新/削除されたレコードを見つけて手動で実行するためにさまざまな結合を行う必要があるだけですか? この2番目の方法でなんとかできると確信していますが、それでもなお、提案は大歓迎です(動作するコードを探しているわけではありません)。

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 に答える