2017-04-03 120 views
0

没有破折号无法更新的唯一标识符字段如何更新从SQL Server nvarchar的唯一标识符(GUID)(无破折号GUID)

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
Conversion failed when converting from a character string to uniqueidentifier.

的GUID在表1必须在 “无破折号格式”

e1336903e4d04d2a88ad23ed87ddfff0 

的GUID在tabl2是

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

我试图铸造varchar(36)和其他变化同样的错误

谢谢!

+1

让我们来看看,如果这是正确的。表2中的字段是唯一标识符。 Table1中的字段是一个varchar(40)。您想要获取uniqueidentifier,将其转换为varchar,删除破折号,然后将其保存在Table1中。为此,需要在使用REPLACE()之前将GUID CAST/CONVERT转换为varchar。 **注意**如果您尝试将转换的GUID存储到Table1中的uniqueidentifier字段中 - 则不能这样做。 uniqueidentifier是一个数字值,而不是字符串。 –

+1

'如果您试图将转换后的GUID存储到Table1中的uniqueidentifier字段中 - 您无法这么做'基本上这一点。如果你想去掉破折号,你的table1中的“GUID”需要是某种字符类型(例如char(32))。 – ZLK

+0

每个表中的两个字段都是uniqueidentifier数据类型。有没有反正保存它的表格格式 –

回答

0

下面的代码试着和数据类型为nvarchar创建[的Guid](36)


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