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

我以为我有一种快速的方法可以将唯一标识符值转换为 Big Int,然后再转换回来。但是我的第二次转换有一个问题。任何人都可以评论将 GUID 完全转换为数字并返回的正确方法吗?当我尝试将其从数字表示形式转换回其原始 GUID 时,我只获得了 GUID 的一部分,而不是全部。

我想将一个整数(我认为它在 MSSQL 中被归类为“Large BigInt”?)传递给远程系统,只使用字符 0-9,并且仍然获得 NewId() 的随机唯一性。

4

1 回答 1

17

您的第二次转换没有问题。当我在 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)

由于您将 8 字节值转换为 16 字节 guid,因此 guid 的一半将为零,这正是您所看到的。

于 2012-04-09T19:38:14.347 回答