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

Myślałem, że mam szybki sposób na przekonwertowanie wartości Unique Identifier na Big Int iz powrotem. Ale w moim drugim nawróceniu jest problem. Czy każdy może skomentować właściwy sposób pełnego przekonwertowania identyfikatora GUID na numer i z powrotem? Dostaję tylko część GUID, a nie całość, gdy próbuję przekonwertować go z powrotem z reprezentacji numerycznej do pierwotnego identyfikatora GUID.Konwersja z UniqueIdentifier na BigInt iz powrotem?

Chcę przekazać liczbę całkowitą (myślę, że zostałoby to sklasyfikowane jako "Large BigInt" w MSSQL?) Do systemu zdalnego i wystarczy użyć znaków 0-9, a nadal uzyskać losową unikatowość NewId().

+11

'uniqueidentifier' ma 16 bajtów. "Bigint" ma tylko 8. To nie zadziała. Dlaczego próbujesz to zrobić? –

+4

Co taki przelicznik oznacza? – Oded

+0

Ponownie zredagowałem oryginalne pytanie, aby rozwiązać ten problem, muszę wymieniać dane z systemem, który pobiera liczby, ale nie zawiera kodów alfanumerycznych i uważał, że identyfikator GUID, który nie wygląda na GUID, działałby. – Snowy

Odpowiedz

12

Nie ma problemu z drugą konwersją. Kiedy uruchomić SQL w SQL Management Studio, otrzymuję:

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

(1 row(s) affected) 


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

(1 row(s) affected) 


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

(1 row(s) affected) 

Ponieważ jesteś konwersji wartości 8 bajtów do 16 bajtów GUID połowa GUID będzie zera, co jest dokładnie to, co widzisz.

Powiązane problemy