2013-10-29 4 views
11

C# 및 SQL Server에서 int를 guid로 변환 할 때 다른 값을 얻습니다. C#에서 C# 및 SQL Server에서 guid로 다른 캐스팅

은 내가

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

왜 그들이 다르게 행동 할 사용하는 SQL 서버에서이 방법

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 

를 사용할 수 있습니까?

답변

14

이는 SQL Server와 .net이 int를 다른 형식으로 저장하기 때문에 발생합니다. 이 트릭 할 것입니다 :

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

SQL Server의 각 그룹의 바이트는 각 그룹의 첫 번째 8 바이트에 대해 "반전".

문자열 형식 '6F9619FF-8B86-D011-B42D-00C04FC964FF : 바이트의 순서에주의 - 그것은 가치를 제공하는 2 가지 방법이 있다는 것을 말한다 uniqueidentifierhttp://technet.microsoft.com/en-us/library/aa223933(v=sql.80).aspx

에 대한 설명서를 참조하십시오 '

바이너리 형식 0xff19966f868b11d0b42d00c04fc964ff