【问题标题】:How to update uniqueidentifier (GUID) from nvarchar in SQL Server (GUID with no dashes)如何从 SQL Server 中的 nvarchar 更新 uniqueidentifier (GUID)(没有破折号的 GUID)
【发布时间】: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


【解决方案1】:

尝试下面的代码并使用数据类型 NVarchar(36) 创建 [Guid]


IF OBJECT_ID(N'tempdb..##Temp1') IS NOT NULL
    DROP TABLE ##Temp1

CREATE TABLE ##Temp1 (
    Id INT identity
    ,Gid NVARCHAR(36)
    )

INSERT INTO ##Temp1 (Gid)
SELECT NEWID()

IF EXISTS (
        SELECT 1
        FROM ##Temp1
        WHERE CHARINDEX('-', Gid) > 0
        )
BEGIN
    UPDATE T2
    SET Gid = REPLACE(T3.Gid, '-', '')
    FROM ##Temp1 t2
    INNER JOIN ##Temp1 AS T3 ON T3.Id = t2.Id
END
ELSE
BEGIN
    PRINT 'No record contains with symbol ''-'''
END

SELECT * FROM ##Temp1

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 2012-06-08
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多