ソーステーブルからターゲットテーブルにデータをロードするシナリオがあります。ソースからのデータがターゲットに存在しない場合は、挿入する必要があります。すでにターゲット表に存在する場合は、行のステータスを「期限切れにする」ように更新し、その列を新しい行として挿入します。私はこれを行うには、マージクエリを使用します。私は存在しない場合は挿入を行うことができ、私も更新を行うことができます。しかし、一致したときに挿入しようとしているとき、 '一致した'句には挿入が許可されていません。 事前SQL Server 2008のマージクエリ
答えて
ソースデータの単一行に対して複数のアクションを実行する場合は、その行を何らかの形で複製する必要があります。
(テーブル名などを構成する)は、次のような何か:
;WITH Source as (
SELECT Col1,Col2,Col3,t.Dupl
FROM SourceTable,(select 0 union all select 1) t(Dupl)
)
MERGE INTO Target t
USING Source s ON t.Col1 = s.Col1 and s.Dupl=0 /* Key columns here */
WHEN MATCHED THEN UPDATE SET Expired = 1
WHEN NOT MATCHED AND s.Dupl=1 THEN INSERT (Col1,Col2,Col3) VALUES (s.Col1,s.Col2,s.Col3);
そうでない場合は、ソースの行が任意のターゲット列が一致しないので、あなたは常に、一致していない枝にs.Dupl条件をしたいです2回挿入される。あなたは、私が変更したい、コメントとして投稿の例から
:
MERGE target AS tar USING source AS src ON src.id = tar.id
WHEN MATCHED THEN UPDATE SET [email protected], C_IS_ACTIVE='N', [email protected]
WHEN NOT MATCHED THEN INSERT (col1,col2,col3) VALUES (tar.col1,tar.col2,tar.col3);
へ:
;WITH SourceDupl AS (
SELECT id,col1,col2,col3,t.Dupl
FROM source,(select 0 union all select 1) t(Dupl)
)
MERGE target AS tar USING SourceDupl as src on src.id = tar.id AND Dupl=0
WHEN MATCHED THEN UPDATE SET [email protected], C_IS_ACTIVE='N', [email protected]
WHEN NOT MATCHED AND Dupl=1 THEN INSERT (col1,col2,col3) VALUES (src.col1,src.col2,src.col3);
私は以来、VALUES
句で値を変更しましたNOT MATCHEDブランチでは、tarテーブルには値を選択する行がありません。
初めてデータを挿入するときに 'WHERE NOT MATCHED'を実行することができます。次回は、データが存在するときに更新を実行し、挿入するために、あなたが以前に宣言した同じ 'WHEN NOT MATCHED'節を使用したいと望む場合...マージは2 'WHEN NOT MATCHED'節を許可しませんか?私は何かを 'WHEN NOT MATCHED'句を区別することができますか –
@ user549903 - あなたが今何を求めているのか分かりません。私が示したステートメントでは、ターゲット表に一致する行がある場合、UPDATEとINSERTの両方が発生します。 –
MERGEターゲットAS tarソースを使用してソースをsrc.id = tar.idに更新したときD_VALID_TO = @ nowdate-1、C_IS_ACTIVE = 'N'、D_LAST_UPDATED_DATE = @ nowdate INSERT(col1、col2、 col3) VALUES(tar.col1、tar.col2、tar.col3); –
のおかげでは、それらの多くのリンクのいずれかのチェックアウト..私を助けてください:実際に何を知らなくても
- Using SQL Server 2008's MERGE Statement
- MERGE on Technet
- Introduction to MERGE statement
- SQL Server 2008 MERGE
をあなたのデータベーステーブルl私たちはもっと助けになることはできません - あなたはそれらの記事を読んで、あなたの具体的な状況にこれを適用する方法を理解する必要があります。
- 1. SQL Serverのマージクエリ - 重複しますか?
- 2. マージクエリ
- 3. SQL Server 2008の
- 4. SQL Server 2008の
- 5. SQL Server 2008の
- 6. - SQL Server 2008の
- 7. - SQL Serverの2008
- 8. SQL Server 2008の
- 9. Windows Server 2008/SQL Server 2008クラスタの設定
- 10. SQL Server 2008 SELECT
- 11. SQL Server 2008データベースセカンダリ
- 12. Sql Server 2008エージェントログパージ
- 13. SQL Server 2008 DBMail
- 14. Sql Server 2008キャッチエラーコレクション
- 15. SQL Server 2008イベントドリブンアーキテクチャ
- 16. SQL Server 2008
- 17. SQL Server 2008:グループデータベース
- 18. SQL Server 2008レポートサービス
- 19. SQL Server 2008 sp1
- 20. Sql Server 2008 coalesce
- 21. Sql Server 2008トリガー
- 22. Sql Server 2008クロスタブクエリ
- 23. SQL Server 2008のOPENROWSET
- 24. INSERT(SQL Server 2008の)
- 25. SQL Server 2008のサーバーディレクトリルックアップ
- 26. SQL Server 2008のデータウェアハウス
- 27. SQL Server 2008のリフレクション?
- 28. ヘルプ() - SQL Server 2008の
- 29. SQL Server 2008のデータベース
- 30. は、SQL Server 2008の
あなたが既に持っているものを見せてください!あなたのテーブルがどのように見えるか説明してください! –