2016-09-28 3 views
2

SQL MERGE를 수행하는 데 powershell 함수를 사용하고 있습니다. 내 삽입이 작동하지만 내 삭제는 내 목표 테이블의 모든 행을 삭제합니다. 변수이 PowerShell을 치환되고처럼 내 SQL 문은 같습니다SQL 병합 대상 테이블의 모든 행을 삭제합니다.

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 문에서 소스 테이블을 삭제 하시겠습니까? 원본 테이블에서 일치하는 것이 없으면 delete 문이 현재 대상 테이블에서 삭제되기 때문입니다. – ZLK

+0

@ZLK - 내 목표 테이블에서 특정 행을 삭제하고 싶습니다. –

답변

0

내가 생각하는 당신의 조건 이 잘못되었습니다.

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

NOT 제거

0

죄송합니다. 내 코드의 다른 곳에서 문제가 발견되었습니다. 단 몇 개의 레코드로 원본 테이블을 생성했습니다. 내 병합이 제대로 작동했습니다. 끔찍하게 틀린 소스 테이블을 작성하는 것이 내 코드였다. 이 질문을 마무리하십시오.

관련 문제