generar - Convierta varchar en uniqueidentifier en SQL Server
tipo de dato uniqueidentifier sql server (6)
Sería una función útil. Además, tenga en cuenta que estoy usando STUFF en lugar de SUBSTRING.
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
Una tabla para la que no tengo control del esquema contiene una columna definida como varchar (50) que almacena uniqueidentifiers en el formato ''a89b1acd95016ae6b9c8aabb07da2010'' (sin guiones)
Quiero convertirlos a uniqueidentifiers en SQL para pasar a .Net Guid. Sin embargo, las siguientes líneas de consulta no funcionan para mí:
select cast(''a89b1acd95016ae6b9c8aabb07da2010'' as uniqueidentifier)
select convert(uniqueidentifier, ''a89b1acd95016ae6b9c8aabb07da2010'')
y resulta en:
Msg 8169, Level 16, State 2, Line 1 Conversion failed when converting from a character string to uniqueidentifier.
Las mismas consultas que utilizan un identificador único con guiones funcionan bien, pero los datos no se almacenan en ese formato.
¿Hay otra forma (eficiente) de convertir estas cadenas a uniqueidentifiers en SQL? - No quiero hacerlo en el código .Net.
Si su cadena contiene caracteres especiales, puede hacer un hash en md5 y luego convertirlo a un guid / uniqueidentifier.
SELECT CONVERT(UNIQUEIDENTIFIER, HASHBYTES(''MD5'',''~öü߀a89b1acd95016ae6b9c8aabb07da2010''))
se le proporciona guid no es el formato correcto (.net Provided guid).
comience intente seleccione convertir (uniqueidentifier, ''a89b1acd95016ae6b9c8aabb07da2010'') fin intente comience la captura imprima ''1'' captura final
su 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))
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)
SELECT CONVERT(uniqueidentifier,STUFF(STUFF(STUFF(STUFF(''B33D42A3AC5A4D4C81DD72F3D5C49025'',9,0,''-''),14,0,''-''),19,0,''-''),24,0,''-''))