问题描述
我有 2 个表,其中有一列的数据类型为 uniqueidentifier。使用 MERGE 语句时,它会毫无问题地插入行。 UPDATE 部分失败并显示错误 Conversion failed when converting from a character string to uniqueidentifier.
我已经搜索过,但无法找到为什么会发生这种情况的答案。我已经在 SQL2017 和 SQL2019 上测试过这个,同样的错误。这是一个显示错误的简单脚本。
DECLARE @T2 TABLE(ID_var VARCHAR(36),ID_unique uniqueidentifier);
INSERT INTO @T1 ( ID_var ) VALUES ('0E984725-C51C-4BF4-9960-E1C80E27ABA0');
INSERT INTO @T2 ( ID_var ) SELECT NEWID();
INSERT INTO @T2 ( ID_var,ID_unique) VALUES ('0E984725-C51C-4BF4-9960-E1C80E27ABA0','0E984725-C51C-4BF4-9960-E1C80E27ABA0')
-- This works
UPDATE @T2
SET ID_unique = NEWID()
WHERE ID_unique IS NULL;
SELECT * FROM @T1;
SELECT * FROM @T2;
MERGE @T1 AS t1
USING (SELECT ID_var,ID_unique FROM @T2) AS t2
ON t1.ID_var = t2.ID_var
-- Insert NEW Rows -- this works
WHEN NOT MATCHED
THEN INSERT (ID_var,ID_unique)
VALUES (ID_var,ID_unique)
-- Update CHANGED Rows -- This fails
WHEN MATCHED AND COALESCE(t1.ID_unique,'') <> COALESCE(t2.ID_unique,'')
THEN UPDATE
SET
ID_unique = t2.ID_unique
OUTPUT $action,inserted.*,deleted.*
;
SELECT * FROM @T1;
有没有人知道为什么会发生这种情况或如何解决它的文档。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)