【发布时间】:2019-08-07 14:04:12
【问题描述】:
我有一个源表,其数据与我的目标表相同。当我尝试运行合并语句时,它失败并出现错误
合并不能多次更新目标行。
所以我的问题是,因为它们与 SQL 成功的原因相同,但受影响的是 0 行。请帮助我理解这一点。
顺便说一句,我的语法是正确的,因为在我最初的插入中它成功了,问题是如果再次重新运行它。
谢谢。
目标表和源表有相同的数据。
WHEN MATCHED AND ISNULL(T.VALUE,'') <> ISNULL(S.VALUE,'')
COL1 COL2 COL3 VALUE DATE
1 A TYPE 3 2019-01-02
2 B KIND 4 2019-01-03
1 A COLOR 0 2019-01-02
2 B KIND 0 2019-01-03
MERGE TargetTable T
USING
(
SELECT COL1,
COL2,
COL3,
VALUE,
DATE
FROM SourceTable S
) s
ON
(
S.COL1 = T.COL1
AND S.COL2 = T.COL2
AND S.COL3 = T.COL3
AND S.DATE = T.DATE
)
WHEN MATCHED AND
(
ISNULL(S.VALUE,'') <> ISNULL(T.VALUE,'')
)
THEN UPDATE
SET
T.VALUE = S.VALUE
WHEN NOT MATCHED
THEN INSERT VALUES
(
S.COL1
,S.COL2
,S.COL3
,S.VALUE
,S.DATE
);
【问题讨论】:
-
合并语句在哪里?
-
您应该标记目标数据库引擎。是 SQL Server 吗?
-
很抱歉没有意识到这一点,是的,它是 SQL 2017
标签: sql-server sql-server-2017 sql-merge