Confronta Varchar e UniqueIdentifier
-
12-09-2019 - |
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.
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.