16
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 ) )

一意の識別子の値をBigIntに変換し、元に戻すための高速な方法があると思いました。しかし、私の2番目の変換には問題があります。GUIDを数値に完全に変換して元に戻す正しい方法について誰かがコメントできますか?GUIDを数値表現から元のGUIDに変換し直そうとすると、GUIDの一部しか取得できず、すべてが取得されるわけではありません。

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

4

1 に答える 1

17

2回目の変換に問題はありません。SQL Management StudioでSQLステートメントを実行すると、次のようになります。

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

(1 row(s) affected)


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

(1 row(s) affected)


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

(1 row(s) affected)

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

于 2012-04-09T19:38:14.347 に答える