Domanda

A causa di una svista piuttosto brillante nel mio progetto attuale, abbiamo alcuni GUID sempre conservato in una colonna varchar in una tabella, che devono essere a fronte di una colonna uniqueidentifier in un altro.

Come posso fare questo? SQL server dice semplicemente che non può convertire da una stringa di caratteri ad un uniqueidentifier.

È stato utile?

Soluzione

Se SQL si lamenta che non può lanciare vuol dire non solo è stato memorizzato l'uniqueidentifier come varchar, è stato utilizzato un formato diverso rispetto a SQL Server (ad es. È stato aggiunto il '{' e '}'). SQL è perfettamente in grado di lanciare stringa da uniqueidentifier quando formattata correttamente:

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

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

A seconda di come si actualy memorizzato l'uniqueidentifier, è molto probabile che tomodify i dati e il codice in base al formato SQL (senza {}).

Altri suggerimenti

Convertire l'uniqueidentifier a varchar:

CAST( uniqueidentifier_col_name as varchar)

Ho appena lavorato il seguente script di test:

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'

Esegui in una finestra di SQL Server Management Studio o tramite file -i slqcmd, i risultati sono gli stessi - SQL (2005) fa la conversione implicita. Questo supporta quello che mi ricordo da SQL 2000, quando ho avuto un problema simile anni fa.

La cosa fondamentale è che la stringa varchar deve corrispondere al modello guid:

  • 8 cifre esadecimali
  • trattino
  • 4 cifre esadecimali
  • trattino
  • 4 cifre esadecimali
  • trattino
  • 4 cifre esadecimali
  • trattino
  • 12 cifre esadecimali

Si dovrà lanciare l'altra uniqueidentifier a VARCHAR.

SQL Server è probabilmente tryng a gettare le cose come "bob" per uniqueidentifier e non riesce. Secondo CAST / Convert è consentito, così devono essere i valori nella colonna varchar.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top