SQL Merge删除目标表中的所有行

时间:2016-09-28 22:58:41

标签: sql sql-server powershell merge

我使用powershell函数执行SQL MERGE。我的插入工作正常,但我的删除是删除目标表中的所有行。我的SQL语句看起来像这样,变量被PowerShell代替:

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

2 个答案:

答案 0 :(得分:0)

我认为 DELETE 的条件错误

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

删除NOT

答案 1 :(得分:0)

对不起每个人。我在代码的其他地方发现了这个问题。我只用几条记录制作源表。我的MERGE工作正常。这是我的代码来构建非常错误的源表。结束这个问题。