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

私は、ユニークな識別子の値をBig Intに変換して戻すための速い方法があると思いました。しかし、私の2番目の改宗者には問題があります。 GUIDを完全に数字に変換して戻す方法は誰でもコメントできますか?数値表現から元のGUIDに変換しようとすると、GUIDの一部だけが取得されます。UniqueIdentifierからBigIntに変換して戻る?

リモートシステムに整数を渡したい(MSSQLで "Big BigInt"と分類されると思いますが)、文字0-9を使用して、NewId()のランダムな一意性を取得します。

+11

「uniqueidentifier」は16バイトです。 'bigint'はわずか8です。これはうまくいかないでしょう。なぜあなたはこれをやろうとしていますか? –

+4

このような変換はどういう意味ですか? – Oded

+0

これに対処するためにオリジナルの質問を再度編集しました。英数字コードではなく数字を使用するシステムとデータを交換する必要があり、GUIDのように見えないGUIDが機能すると考えました。 – Snowy

答えて

12

2番目のコンバートには問題ありません。私は、SQL管理スタジオでSQL文を実行すると、私が手:

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

(1 row(s) affected) 


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

(1 row(s) affected) 


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

(1 row(s) affected) 

あなたは16バイトのGUIDに8バイトの値を変換しているので、GUIDの半分は、あなたが見ている正確に何である、ゼロになります。

関連する問題