2012-04-09 10 views
9
declare @uu uniqueidentifier = 'C50B0567-F8CC-4219-A1E1-91C97BD9AE1B' 
select @uu 
declare @zaza bigint = (select convert(bigint, convert (varbinary(8), @uu, 1))) 
select @zaza 
select CONVERT(uniqueidentifier , convert(varbinary(16) , @zaza , 1)) 

Pensavo di avere un modo rapido per convertire i valori di Identificatore univoco in un Big Int e viceversa. Ma c'è un problema nel mio secondo convertito. Qualcuno può commentare il modo giusto per convertire completamente un GUID in un numero e tornare? Ricevo solo parte del GUID e non tutto quando provo a convertirlo dalla rappresentazione numerica al GUID originale.Convertire da UniqueIdentifier a BigInt e Back?

Voglio passare un numero intero (penso che sarebbe classificato come "Large BigInt" in MSSQL?) Su un sistema remoto e utilizzare solo caratteri 0-9 e ottenere comunque l'univocità casuale di NewId().

+11

'uniqueidentifier' è 16 byte. Un "bigint" è solo 8. Questo non funzionerà. Perché stai provando a fare questo? –

+4

Cosa significherebbe una tale conversione ??? – Oded

+0

Ho modificato nuovamente la domanda originale per risolvere questo problema, ho bisogno di scambiare dati con un sistema che accetta numeri ma non codici alfanumerici e ho pensato che un GUID che non sembrava un GUID avrebbe funzionato. – Snowy

risposta

12

Nessun problema con il tuo secondo convertito. Quando eseguo l'istruzione SQL in studio gestione SQL, ottengo:

------------------------------------ 
C50B0567-F8CC-4219-A1E1-91C97BD9AE1B 

(1 row(s) affected) 


-------------------- 
7423352504965404994 

(1 row(s) affected) 


------------------------------------ 
C50B0567-F8CC-4219-0000-000000000000 

(1 row(s) affected) 

Dal momento che si sta convertendo 8 valore di byte per GUID di 16 byte, la metà di guid sarà zeri, che è esattamente ciò che state vedendo.

Problemi correlati