2016-09-28 18 views
2

私はSQL MERGEを実行するためにpowershell関数を使用しています。私の挿入が機能していますが、私の削除は私のターゲットテーブルのすべての行を削除しています。私のSQL文がPowerShellので置換された変数を次のようになります。SQL Mergeターゲットテーブルのすべての行を削除します

MERGE INTO $($Target) AS Target 
USING $($Target)_TEMP AS Source 
ON Target.[$($PrimaryKey)] = Source.[$($PrimaryKey)] 
WHEN NOT MATCHED THEN 
INSERT ($InsertColumns) VALUES ($InsertValues) 
WHEN NOT MATCHED BY Source THEN 
    DELETE; 

あなたがここに完全なPowerShellの機能を見ることができます: http://pastebin.com/uWY6VfmU

例表データ:

domsamgrp (primary key)  samaccountname GroupName Domain whenchanged 
MYDOMAIN\user1\Tableau_Client user1 Tableau_Client MYDOMAIN 55:46.0 
MYDOMAIN\user2\Tableau_Client user2 Tableau_Client MYDOMAIN 55:46.0 
MYDOMAIN\user3\Tableau_CMO  user3 Tableau_CMO  MYDOMAIN 55:48.0 
MYDOMAIN\user1\Tableau_EDM  user1 Tableau_EDM  MYDOMAIN 55:50.0 
MYDOMAIN\user5\Tableau_EDM  user5 Tableau_EDM  MYDOMAIN 55:49.0 
+0

[MERGE documentation](https://msdn.microsoft.com/en-us/library/bb510625.aspx)を見ると、 'USING'はテーブル名の後ろに列名が必要です。私はそれに精通していないが、セクション 'D'をチェックしてください –

+2

あなたはあなたのdeleteステートメントのソーステーブルから削除したいですか?ソーステーブルに一致するものがない場合は、現在、削除ステートメントがターゲットテーブルから削除されているためです。 – ZLK

+0

@ZLK - ターゲットテーブルの特定の行を削除します。 –

答えて

0

を私はあなただと思いますの場合が間違っている

WHEN **NOT** MATCHED **BY Source** THEN 
DELETE; 

NOTを削除します。

0

申し訳ありません。私は自分のコードのどこかで問題を発見しました。私はわずかなレコードでソーステーブルを作成していました。私のマージは正しく働いていた。ひどく間違っていたソーステーブルを作成するのは私のコードでした。この質問を閉じる。

関連する問題