【发布时间】:2021-03-01 19:43:03
【问题描述】:
我正在尝试使用 MERGE 将新值插入到表中,前提是它们尚不存在于同一个表中。
这是我正在使用的查询:
MERGE [dbo].[TARGET_TABLE] AS Target
USING
(SELECT [NAME]
FROM [dbo].[TARGET_TABLE]
WHERE [NAME]='ThisValuesDoesntExists' AND [STATUS] IS NULL) AS Source
ON Target.[NAME]= Source.[NAME]
WHEN NOT MATCHED
THEN INSERT ([NAME],[file_first_upload],[upload_date])
VALUES('ThisValuesDoesntExists',1,DEFAULT);
但是当我执行它时,我收到一条(0 行受影响)消息。
如果我执行“源”查询,我会得到 0 行。
SELECT [NAME]
FROM [dbo].[TARGET_TABLE]
WHERE [NAME] = 'ThisValuesDoesntExists' AND [STATUS] IS NULL
我做错了什么?
谢谢
【问题讨论】:
-
您从
TARGET_TABLE到TARGET_TABLE合并似乎很奇怪。 -
您正在向后考虑...当您的源表中没有行时,没有匹配或不匹配。要获得不匹配,您需要源中的一行在您的目标中不存在 - 您已尝试以相反的方式进行操作。如果您将源设为静态
values,则它可以工作。 -
Reasons why not to use
MERGE(不确定其中有多少仍然是当前的错误)以及a good reason to yes useMERGEin this type of query 顺便说一句,我建议UPDLOCK, HOLDLOCK提示目标
标签: sql sql-server tsql sql-server-2017 sql-merge