스키마를 제어 할 수없는 테이블에는 ‘a89b1acd95016ae6b9c8aabb07da2010′(하이픈 없음) 형식으로 고유 식별자를 저장하는 varchar (50)로 정의 된 열이 포함되어 있습니다.
.Net Guid에 전달하기 위해 SQL의 고유 식별자로 변환하고 싶습니다. 그러나 다음 쿼리 줄은 작동하지 않습니다.
select cast('a89b1acd95016ae6b9c8aabb07da2010' as uniqueidentifier)
select convert(uniqueidentifier, 'a89b1acd95016ae6b9c8aabb07da2010')
결과 :
메시지 8169, 수준 16, 상태 2, 줄 1 문자열에서 uniqueidentifier로 변환 할 때 변환에 실패했습니다.
하이픈이있는 고유 식별자를 사용하는 동일한 쿼리는 제대로 작동하지만 데이터는 해당 형식으로 저장되지 않습니다.
이러한 문자열을 SQL의 고유 식별자로 변환하는 또 다른 (효율적인) 방법이 있습니까? -.Net 코드에서하고 싶지 않습니다.
답변
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)
답변
편리한 기능이 될 것입니다. 또한 SUBSTRING 대신 STUFF를 사용하고 있습니다.
create function str2uniq(@s varchar(50)) returns uniqueidentifier as begin
-- just in case it came in with 0x prefix or dashes...
set @s = replace(replace(@s,'0x',''),'-','')
-- inject dashes in the right places
set @s = stuff(stuff(stuff(stuff(@s,21,0,'-'),17,0,'-'),13,0,'-'),9,0,'-')
return cast(@s as uniqueidentifier)
end
답변
귀하의 varchar col C :
SELECT CONVERT(uniqueidentifier,LEFT(C, 8)
+ '-' +RIGHT(LEFT(C, 12), 4)
+ '-' +RIGHT(LEFT(C, 16), 4)
+ '-' +RIGHT(LEFT(C, 20), 4)
+ '-' +RIGHT(C, 12))
답변
SELECT CONVERT(uniqueidentifier,STUFF(STUFF(STUFF(STUFF('B33D42A3AC5A4D4C81DD72F3D5C49025',9,0,'-'),14,0,'-'),19,0,'-'),24,0,'-'))
답변
문자열에 특수 문자가 포함되어 있으면 md5로 해시 한 다음 guid / uniqueidentifier로 변환 할 수 있습니다.
SELECT CONVERT(UNIQUEIDENTIFIER, HASHBYTES('MD5','~öü߀a89b1acd95016ae6b9c8aabb07da2010'))
답변
제공된 GUID가 올바른 형식 (.net 제공 GUID)이 아닙니다.
begin try
select convert(uniqueidentifier,'a89b1acd95016ae6b9c8aabb07da2010')
end try
begin catch
print '1'
end catch