132 votes

Convertir varchar en uniqueidentifier dans SQL Server

Une table dont je ne contrôle pas le schéma contient une colonne définie comme varchar(50) qui stocke des identifiants uniques au format 'a89b1acd95016ae6b9c8aabb07da2010' (sans tiret).

Je veux les convertir en identifiants uniques en SQL pour les passer à un guide .Net. Cependant, les lignes de requête suivantes ne fonctionnent pas pour moi :

select cast('a89b1acd95016ae6b9c8aabb07da2010' as uniqueidentifier)
select convert(uniqueidentifier, 'a89b1acd95016ae6b9c8aabb07da2010')

et se traduisent par :

Msg 8169, Level 16, State 2, Line 1
Conversion failed when converting from a character string to uniqueidentifier.

Les mêmes requêtes utilisant un identifiant unique avec trait d'union fonctionnent bien mais les données ne sont pas stockées dans ce format.

Existe-t-il un autre moyen (efficace) de convertir ces chaînes en identificateurs uniques dans SQL ? -- Je ne veux pas le faire dans le code .Net.

0 votes

Une simple rangée de caractères et de chiffres n'est vraiment pas une représentation GUID valide - vous devrez recourir à la magie de l'analyse des chaînes de caractères comme Quassnoi l'a montré dans sa réponse.

-7voto

user3082965 Points 1

Le guide fourni n'est pas du bon format (.net Provided guid).

begin try
select convert(uniqueidentifier,'a89b1acd95016ae6b9c8aabb07da2010')
end try
begin catch
print '1'
end catch

9 votes

En quoi cela répond-il à la question de la conversion d'un varchar sans trait d'union en GUID ? Tout ce que fait ce code est d'imprimer 1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X