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()的随机唯一性。
您的第二次转换没有问题。当我在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的一半将为零,这正是您所看到的。