2009-08-10 22 views
8

Debido a una supervisión bastante brillante en mi proyecto actual, tenemos algunas guías que se almacenan en una columna varchar en una tabla, que deben ser comparadas con una columna identificadora única en otra.Comparar Varchar y UniqueIdentifier

¿Cómo puedo hacer esto? El servidor SQL simplemente dice que no puede convertir de una cadena de caracteres a un identificador único.

Respuesta

15

Si SQL se queja de que no puede convertir esto significa que no solo almacenó el identificador único como varchar, utilizó un formato diferente que SQL Server (por ejemplo, agregó el '{' y '}'). SQL es perfectamente capaz de lanzar cadena a UNIQUEIDENTIFIER cuando el formato correcto:

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

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

Dependiendo de cómo se almacenó actualy uniqueidentifier, lo más probable es que tenga tomodify los datos y el código para que coincida con el formato SQL (sin {}) .

5

Convertir uniqueidentifier a varchar:

CAST(uniqueidentifier_col_name as varchar) 
+0

No se puede echar a un solo varchar varchar, pero (50) es decir –

1

que tendrá que emitir el otro uniqueidentifier a varchar.

SQL Server probablemente está intentando lanzar cosas como "bob" a uniqueidentifier y falla. De acuerdo con CAST/CONVERT está permitido, por lo que deben ser los valores en la columna varchar.

4

que sólo funcionó hasta el siguiente script de prueba:

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' 

Ejecutar en una ventana de SSMS o vía -i archivo slqcmd, los resultados son los mismos - SQL (2005) hace la conversión implícita. Esto es compatible con lo que recuerdo de SQL 2000 cuando tuve un problema similar hace años.

La clave es que la cadena varchar tiene que coincidir con el patrón GUID:

  • 8 dígitos hexadecimales
  • tablero
  • 4 dígitos hexadecimales
  • guión
  • 4 dígitos hexadecimales
  • tablero
  • 4 dígitos hexadecimales
  • tablero
  • 12 dígitos hexadecimales
Cuestiones relacionadas