【发布时间】: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