MERGE语句DELETE SQL Server中的替代方法

时间:2017-07-05 14:06:49

标签: sql sql-server tsql

我使用T-SQL MERGE语句进行查询。由于性能问题,我正在使用IF Exists UpdateIf Not Exists Insert编写查询。我可以毫无问题地编写插入/更新。但是我无法处理DELETE。有人可以帮我这个吗?

以下是样本

---SAMPLE MERGE STATEMENT
MERGE 
   member_topic AS target
USING 
   someOtherTable AS source
ON 
   target.mt_member = source.mt_member 

WHEN MATCHED THEN 
   UPDATE SET target.mt_notes = source.mt_notes
WHEN NOT MATCHED THEN 
   INSERT (mt_member, mt_topic, mt_notes) VALUES (source.mt_member, source.mt_notes)

WHEN NOT MATCHED BY SOURCE THEN
DELETE member_topic;


--UPDATE

UPDATE T SET T.mt_notes = S.mt_notes
FROM member_topic T 
JOIN someOtherTable S ON T.mt_member=S.mt_member


--INSERT

INSERT INTO member_topic(mt_member, mt_topic, mt_notes)   
SELECT mt_member, mt_topic, mt_notes 
FROM someOtherTable S 
WHERE NOT EXISTS(SELECT 1 
                 FROM member_topic T 
                 WHERE T.mt_member=S.mt_member)

如何处理

WHEN NOT MATCHED BY SOURCE THEN
DELETE member_topic;
单个DELETE语句中的

3 个答案:

答案 0 :(得分:1)

要在proc

中的开始和结束之间嵌入的示例脚本
   MERGE dbo.Tablet AS TARGET
     USING dbo.QueryView AS SOURCE 
    ON ( 
        TARGET.[ID] = SOURCE.[ID] 
        )

 WHEN MATCHED 

  THEN
 UPDATE SET

 TARGET.[ID] = SOURCE.[ID]

 WHEN NOT MATCHED BY TARGET THEN 
 INSERT (ID, [Name]  )
 VALUES (SOURCE.[ID], SOURCE.[Name]  )

 WHEN NOT MATCHED BY SOURCE THEN
 DELETE;

答案 1 :(得分:0)

尝试

DELETE T
FROM member_topic T 
WHERE NOT EXISTS(SELECT 1 
                 FROM someOtherTable S 
                 WHERE T.mt_member=S.mt_member)

答案 2 :(得分:0)

DELETE t
FROM member_topic t
    LEFT JOIN someOtherTable s ON t.mt_member = s.mt_member
WHERE s.mt_member IS NULL