web-dev-qa-db-ja.com

UniqueIdentifierからBigIntに変換して戻しますか?

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に変換して戻そうとします。

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

13
Snowy

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の半分はゼロになります。これはまさにあなたが見ているものです。

15
galets