2013-09-22 115 views
1

我需要将数据从一个SQL表复制到另一个表,我需要这种转换, 我试过如下:NVARCHAR TO UNIQUEIDENTIFIER转换

SELECT TOP 10 CAST(Per_ID as UniqueIdentifier FROM Test 

SELECT TOP 10 CONVERT(UniqueIdentifier,Per_ID,100) FROM Test 

两个给我这个错误:

Conversion failed when converting from a character string to uniqueidentifier .

+1

你可以显示一些Per_ID数据吗? – Kaf

+0

Per_ID 1915DE0055FA11D6A6E40008C7D0BAB1 –

回答

0

Uniqueindentifier只能包含HEX值,它表示AF和0-9。

+0

Per_ID 1915DE0055FA11D6A6E40008C7D0BAB1(该ID具有HEX值) –

0

您可以创建这个转换一个用户自定义函数(假设MS SQL服务器正在使用):

IF OBJECT_ID (N'dbo.NvarcharToUniqueidentifier', N'FN') IS NOT NULL 
    DROP FUNCTION dbo.NvarcharToUniqueidentifier; 
GO 
CREATE FUNCTION dbo.NvarcharToUniqueidentifier (@id nvarchar(100)) 
RETURNS UNIQUEIDENTIFIER 
WITH EXECUTE AS CALLER 
AS 
BEGIN 
RETURN CAST(LEFT(@id, 8) 
      + '-' +RIGHT(LEFT(@id, 12), 4) 
      + '-' +RIGHT(LEFT(@id, 16), 4) 
      + '-' +RIGHT(LEFT(@id, 20), 4) 
      + '-' +RIGHT(@id, 12) 
      AS UNIQUEIDENTIFIER); 
END 
GO 

你可以调用这个函数如下:

select dbo.NvarcharToUniqueidentifier('1915DE0055FA11D6A6E40008C7D0BAB1') 

输出是:1915DE00-55FA-11D6-A6E4-0008C7D0BAB1

0

您可以使用此脚本将varchar转换为GUID

DECLARE @uuid VARCHAR(50) 
SET @uuid = '1915DE0055FA11D6A6E40008C7D0BAB1' 
SELECT CAST(
     SUBSTRING(@uuid, 1, 8) + '-' + SUBSTRING(@uuid, 9, 4) + '-' + SUBSTRING(@uuid, 13, 4) + '-' + 
     SUBSTRING(@uuid, 17, 4) + '-' + SUBSTRING(@uuid, 21, 12) 
     AS UNIQUEIDENTIFIER)