一个表上的SQL合并命令
我正试图忘掉一个表上的SQL合并命令,sql,sql-server-2008,merge,Sql,Sql Server 2008,Merge,我正试图忘掉MERGEsql语句。我想要实现的是: 在CSScolorOrders表中插入新值,但如果具有colID和ordID的记录已存在,则更新corQuantity列 这就是我的结局: MERGE INTO CSScolorOrders AS TARGET USING (SELECT * FROM CSScolorOrders WHERE ordID = 3) AS SOURCE ON (SOURCE.colID = 1) WHEN MATCHED THEN UPDATE SET c
MERGE
sql语句。我想要实现的是:
在CSScolorOrders
表中插入新值,但如果具有colID
和ordID
的记录已存在,则更新corQuantity
列
这就是我的结局:
MERGE INTO CSScolorOrders AS TARGET
USING (SELECT * FROM CSScolorOrders WHERE ordID = 3) AS SOURCE
ON (SOURCE.colID = 1) WHEN
MATCHED THEN UPDATE SET corQuantity = 1
WHEN
NOT MATCHED BY TARGET
THEN INSERT (colID, ordID, corQuantity) VALUES (1, 3, 1);
不幸的是,它没有引发任何异常,所以我不知道它为什么不起作用。如前所述,您将看到合并与听起来完全一样。取两个表并搜索加入它们的值,我们称之为“X”。如果X是匹配项,则对该记录执行更新。如果不存在,则使用选定的值对目标表执行插入
就你而言,我不完全确定你是否会加入
( ON (SOURCE.colID = 1) )
这是正确的。我很确定这是必须的
on(Source.colID = Target.colID)
因此,完整的声明应该是:
MERGE INTO CSScolorOrders AS TARGET
USING (SELECT * FROM CSScolorOrders WHERE ordID = 3) AS SOURCE
on(Source.colID = Target.colID)
WHEN MATCHED THEN
UPDATE SET corQuantity = 1
WHEN NOT MATCHED BY TARGET
THEN INSERT (colID, ordID, corQuantity) VALUES (1, 3, 1);
但我还没有对此进行测试,并且不能100%确定您的表列是什么,以及您到底要加入什么。但是我提供的链接应该为您指出正确的方向
希望这有帮助
MERGE CSScolorOrders AS TARGET
USING (SELECT * FROM CSScolorOrders WHERE ordID = 3) AS SOURCE
ON (SOURCE.colID = TARGET.colID) WHEN
MATCHED THEN UPDATE SET corQuantity = 1
WHEN
NOT MATCHED
THEN INSERT (colID, ordID, corQuantity) VALUES (1, 3, 1);
这是经过测试的。它不会引用该表两次。我试图在复制密钥更新时复制MySQL。若要更新或插入表,无论该表是否包含记录,您可以按如下方式合并:
- 确保使用子句返回一个条目
- 在ON子句中表示匹配条件
SELECT 'OneEntry' FROM DUAL
与
@Sebas是sql2k8。这是特定于T-SQL的语法。我明白了,很抱歉,我当时以为我可以帮上忙,但不幸的是没有。rgds。
MERGE INTO CSScolorOrders AS TARGET
USING (SELECT 'OneEntry' FROM DUAL) AS SOURCE
ON (colID = 1 and ordID = 3) WHEN
MATCHED THEN UPDATE SET corQuantity = 1
WHEN
NOT MATCHED BY TARGET
THEN INSERT (colID, ordID, corQuantity) VALUES (1, 3, 1);
SELECT 'OneEntry' FROM DUAL
SELECT COUNT(*) FROM CSScolorOrders