在C#和SQL Server中不同地将int转换为guid

在C#和SQL Server中将int转换为guid时,我得到不同的值。

在C#中我使用这种方法

public static Guid Int2Guid( int value ) { byte[] bytes = new byte[16]; BitConverter.GetBytes( value ).CopyTo( bytes, 0 ); return new Guid( bytes ); } Console.Write( Int2Guid( 1000 ).ToString() ); // writes 000003e8-0000-0000-0000-000000000000 

在SQL Server中我使用

 select cast(cast(1000 as varbinary(16)) as uniqueidentifier) -- writes E8030000-0000-0000-0000-000000000000 

他们为什么表现不同?

发生这种情况是因为sql server和.net以不同的格式存储int。 这样就可以了:

 select cast(CONVERT(BINARY(16), REVERSE(CONVERT(BINARY(16), 1000))) as uniqueidentifier) 

SQL Server中每个组中的字节对于每个组中的前8个字节是“反向”的。 查看uniqueidentifier的文档http://technet.microsoft.com/en-us/library/aa223933(v=sql.80).aspx

它声明有两种提供值的方法 – 注意字节的顺序:

字符串格式’6F9619FF-8B86-D011-B42D-00C04FC964FF’

二进制格式0xff19966f868b11d0b42d00c04fc964ff