我使用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
答案 0 :(得分:0)
我认为 DELETE 的条件错误
WHEN **NOT** MATCHED **BY Source** THEN
DELETE;
删除NOT
答案 1 :(得分:0)
对不起每个人。我在代码的其他地方发现了这个问题。我只用几条记录制作源表。我的MERGE工作正常。这是我的代码来构建非常错误的源表。结束这个问题。