【发布时间】:2017-08-28 22:54:06
【问题描述】:
无法更新没有破折号的唯一标识符字段
update a
set GUID = replace(b.guid,'-','')
from table1 a
join table2 b on a.ID=b.ID
我收到此错误:
消息 8169,第 16 级,状态 2,第 26 行
从字符串转换为唯一标识符时转换失败。
table1 中的 GUID 必须是“无破折号格式”
e1336903e4d04d2a88ad23ed87ddfff0
table2 中的 GUID 是
E1336903-E4D0-4D2A-88AD-23ED87DDFFF0
我已尝试转换为 varchar(36) 和其他变体相同的错误
谢谢!
【问题讨论】:
-
让我们看看这是否正确。表 2 中的字段是唯一标识符。表 1 中的字段是 varchar(40)。您想要获取 uniqueidentifier,将其转换为 varchar,删除破折号,然后将其保存在 Table1 中。为此,您需要在使用 REPLACE() 之前将 GUID 转换/转换为 varchar。 注意 如果您尝试将转换后的 GUID 存储到 Table1 中的 uniqueidentifier 字段中 - 您不能这样做。 uniqueidentifier 是一个数值,而不是字符串。
-
If you are trying to store the converted GUID into a uniqueidentifier field in Table1 - you can't do that基本上就是这个。如果你想去掉破折号,你在 table1 中的“GUID”需要是某种 char 类型(例如 char(32))。 -
每个表中的两个字段都是 uniqueidentifier 数据类型。有没有办法把它保存为table1的格式
-
对不起,标题有点误导,但这一切都始于 table2 的 guid 格式正确,但 varchar .. 尝试更新和转换时出现错误。最后在同一个表中创建了另一个字段作为 uniqueidentifier 并使用此代码从 varchar 字段进行更新。 SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' + SUBSTRING(@uuid, 17, 4 ) + '-' + SUBSTRING(@uuid, 21, 12) 作为唯一标识符)
标签: sql-server