在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