Pregunta

Debido a un descuido y no brillante en mi proyecto actual, tenemos algunas guids siendo almacenado en una columna VARCHAR en una tabla, que necesita ser comparada a una columna uniqueidentifier en otro.

¿Cómo puedo hacer esto? servidor SQL, simplemente dice que no puede convertir de una cadena de caracteres a un uniqueidentifier.

¿Fue útil?

Solución

Si SQL se queja de que no puede lanzar que significa no sólo almacenó el uniqueidentifier como varchar, que utilizó un formato diferente de SQL Server (por ejemplo. Añadió 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;

En función de la forma en que almacenó actualy uniqueidentifier, es muy probable que tenga tomodify los datos y el código para que coincida con el formato SQL (sin {}).

Otros consejos

Convertir uniqueidentifier a varchar:

CAST( uniqueidentifier_col_name as varchar)

Hace poco trabajé en 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 apoya lo que recuerdo de SQL 2000 cuando tuve hace unos años con problemas similares.

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

  • 8 dígitos hexadecimales
  • tablero
  • 4 dígitos hexadecimales
  • tablero
  • 4 dígitos hexadecimales
  • tablero
  • 4 dígitos hexadecimales
  • tablero
  • 12 dígitos hexadecimales

Vas a tener que echar la otra uniqueidentifier a varchar.

SQL Server es probablemente tryng para echar cosas por el estilo "bob" a UNIQUEIDENTIFIER y falla. De acuerdo con CAST / CONVERTIR es permitido, por lo deben ser los valores de la columna varchar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top