2012-04-09 28 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)) 

Pensé que tenía una forma rápida de convertir los valores de Unique Identifier a Big Int y viceversa. Pero hay un problema en mi segundo convertido. ¿Alguien puede comentar la forma correcta de convertir completamente un GUID a un número y viceversa? Solo estoy obteniendo parte del GUID y no todo cuando trato de convertirlo de la representación numérica a su GUID original.Convierte de UniqueIdentifier a BigInt y Atrás?

Quiero pasar un número entero (creo que se clasificaría como "Large BigInt" en MSSQL?) En un sistema remoto y simplemente usar los caracteres 0-9, y seguir obteniendo la singularidad aleatoria de NewId().

+11

'uniqueidentifier' es de 16 bytes. Un 'bigint' es solo 8. Esto no va a funcionar. ¿Por qué estás tratando de hacer esto? –

+4

¿Qué significaría tal conversión? – Oded

+0

He editado la pregunta original nuevamente para abordar esto, necesito intercambiar datos con un sistema que toma números pero no códigos alfanuméricos y pensé que un GUID que no pareciera un GUID funcionaría. – Snowy

Respuesta

12

No hay problema con su segunda conversión. Cuando ejecuto la instrucción SQL en el estudio de administración de SQL, me sale:

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

(1 row(s) affected) 


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

(1 row(s) affected) 


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

(1 row(s) affected) 

Desde que está convirtiendo 8 valor de byte a byte GUID de 16, la mitad de GUID será ceros, que es exactamente lo que está viendo.