Question

En raison d'une surveillance plutôt brillante dans mon projet actuel, nous avons quelques GUIDs se stockés dans une colonne varchar dans une table, qui doivent être comparés à une colonne uniqueidentifier dans une autre.

Comment puis-je faire cela? serveur SQL dit simplement qu'il ne peut pas convertir une chaîne de caractères à un uniqueidentifier.

Était-ce utile?

La solution

Si SQL se plaint, il ne peut pas lancer cela signifie non seulement vous avez enregistré le uniqueidentifier comme varchar, vous avez utilisé un format différent de celui de SQL Server (par exemple. Vous avez ajouté le « { » et « } »). SQL est parfaitement capable de couler à chaîne uniqueIdentifier lorsqu'il est correctement formaté:

declare @u uniqueidentifier;
declare @s varchar(64);

select @u = NEWID();
select @s = CAST(@u as varchar(64));
select CAST(@s as uniqueidentifier), @u, @s;

Selon la façon dont vous le uniqueidentifier actualy stocké, vous aurez très probablement tomodify les données et votre code pour correspondre au format SQL (pas {}).

Autres conseils

Convertir le uniqueidentifier à varchar:

CAST( uniqueidentifier_col_name as varchar)

Je viens travaillé le script de test suivant:

DECLARE
  @Foo Uniqueidentifier
 ,@Foo2 varchar(50)

SET @Foo = newid()
SET @Foo2 = newId()

print @Foo
print @Foo2

if @Foo = @Foo2
    print 'Yes'
else
    print 'No'

set @Foo = @Foo2

if @Foo = @Foo2
    print 'Yes'
else
    print 'No'

Exécuter dans une fenêtre SSMS ou via un fichier slqcmd -i, les résultats sont les mêmes - SQL (2005) réalise une conversion implicite. Cela confirme ce que je me souviens de SQL 2000 quand j'ai eu il y a quelques années le même problème.

L'essentiel est que la chaîne de varchar doit correspondre au modèle guid:

  • 8 chiffres hexadécimaux
  • tableau de bord
  • 4 chiffres hexadécimaux
  • tableau de bord
  • 4 chiffres hexadécimaux
  • tableau de bord
  • 4 chiffres hexadécimaux
  • tableau de bord
  • 12 chiffres hexadécimaux

Vous devez jeter l'autre uniqueidentifier à varchar.

SQL Server est tryng probablement de lancer des choses comme « bob » à uniqueIdentifier et il échoue. Selon

scroll top