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

Tôi nghĩ rằng tôi đã có một cách nhanh chóng để chuyển đổi các giá trị Số nhận dạng duy nhất thành Big Int và ngược lại. Nhưng có một vấn đề trong lần chuyển đổi thứ hai của tôi. Bất cứ ai có thể bình luận về đúng cách để chuyển đổi đầy đủ một GUID đến một số và trở lại? Tôi chỉ nhận được một phần của GUID và không phải là toàn bộ điều khi tôi cố gắng chuyển đổi nó trở lại từ đại diện số để GUID ban đầu của nó.Chuyển đổi từ UniqueIdentifier thành BigInt và Back?

Tôi muốn chuyển một số nguyên (tôi nghĩ nó sẽ được phân loại là "Big BigInt" trong MSSQL?) Cho hệ thống từ xa và chỉ sử dụng các ký tự 0-9, và vẫn nhận được tính đơn nhất ngẫu nhiên của NewId().

+11

'uniqueidentifier' là 16 byte. Một 'bigint' chỉ là 8. Điều này sẽ không hoạt động. Tại sao bạn đang cố gắng làm điều này? –

+4

Một chuyển đổi như vậy có ý nghĩa gì ??? – Oded

+0

Tôi đã chỉnh sửa lại câu hỏi gốc để giải quyết vấn đề này, tôi cần trao đổi dữ liệu với một hệ thống có số nhưng không phải là mã số và nghĩ rằng GUID không giống như GUID sẽ hoạt động. – Snowy

Trả lời

12

Không có vấn đề với chuyển đổi thứ hai của bạn. Khi tôi chạy câu lệnh SQL của bạn trong studio quản lý SQL, tôi nhận được:

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

(1 row(s) affected) 


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

(1 row(s) affected) 


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

(1 row(s) affected) 

Vì bạn đang chuyển đổi 8 giá trị byte đến 16 byte guid, một nửa số guid sẽ zero, đó là chính xác những gì bạn đang nhìn thấy.

Các vấn đề liên quan