如何从SQL Server中的nvarchar更新uniqueidentifier(GUID)(没有破折号的GUID)

时间:2017-04-03 22:30:23

标签: sql-server

无破折号无法更新uniqueidentifier字段

update a
set GUID =  replace(b.guid,'-','')
from table1 a 
join table2 b on a.ID=b.ID

我收到此错误:

  

Msg 8169,Level 16,State 2,Line 26
  从字符串转换为uniqueidentifier时转换失败。

table1中的GUID必须为“no dashes format”

e1336903e4d04d2a88ad23ed87ddfff0

tabl2中的GUID是

E1336903-E4D0-4D2A-88AD-23ED87DDFFF0

我已尝试投放到varchar(36)和其他变体同样的错误

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试以下代码并使用数据类型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