在 SQL Server 中将 varchar 转换为 uniqueidentifier

新手上路,请多包涵

我无法控制架构的表包含定义为 varchar(50) 的列,该列以“a89b1acd95016ae6b9c8aabb07da2010”(无连字符)格式存储唯一标识符

我想将这些转换为 SQL 中的唯一标识符以传递给 .Net Guid。但是,以下查询行对我不起作用:

 select cast('a89b1acd95016ae6b9c8aabb07da2010' as uniqueidentifier)
select convert(uniqueidentifier, 'a89b1acd95016ae6b9c8aabb07da2010')

并导致:

消息 8169,第 16 层,状态 2,第 1 行
从字符串转换为唯一标识符时转换失败。

使用连字符唯一标识符的相同查询工作正常,但数据未以该格式存储。

是否有另一种(有效的)方法可以将这些字符串转换为 SQL 中的唯一标识符。 – 我不想在.Net 代码中这样做。

原文由 grenade 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 690
2 个回答
DECLARE @uuid VARCHAR(50)
SET @uuid = 'a89b1acd95016ae6b9c8aabb07da2010'
SELECT  CAST(
        SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' +
        SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12)
        AS UNIQUEIDENTIFIER)

原文由 Quassnoi 发布,翻译遵循 CC BY-SA 2.5 许可协议

SELECT CAST(CAST('A89B1ACD-9501-6AE6-B9C8-AABB07DA2010' as char(36)) as uniqueidentifier)

原文由 mccrhodes 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进