【问题标题】:SQL Merge deleting all my rows in target tableSQL合并删除我在目标表中的所有行
【发布时间】:2017-02-07 02:33:08
【问题描述】:

我正在使用 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

【问题讨论】:

  • 查看MERGE documentation 似乎USING 需要表名后的列名。我不是很精通,但请查看D部分
  • 您是否要在删除语句中从源表中删除?因为当源表中没有任何匹配项时,您的删除语句当前正在从目标表中删除。
  • @ZLK - 我想删除目标表中的特定行。

标签: sql sql-server powershell merge


【解决方案1】:

我认为你 DELETE 的条件是错误的

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

删除 NOT

【讨论】:

    【解决方案2】:

    对不起大家。我在代码的其他地方发现了问题。我正在生成只有几条记录的源表。我的 MERGE 工作正常。这是我构建源表的代码,这是非常错误的。结束这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多