2010-01-27 2 views
1

Microsoft SQL Server를 사용하여 (궁극적으로 ADO.NET EF를 사용하여) 부호없는 int64를 저장하고 검색하려고하는데 문제가 있습니다. SQL Server에서는 정수 열을 부호없는으로 지정할 수 없기 때문에 binary (8)를 사용하여 시도했지만 예상대로 작동하지 않습니다. 다음 쿼리는 (0x03E8000000000000 및 281474976710656000) 예상치 못한 값이 발생할 :SQL Server에서 부호없는 BIGINT로 작업하기

UPDATE table SET uint64 = 1000 
SELECT uint64, cast(uint64 as bigint) FROM table 

불행하게도 : 나는 다음을 실행하면

UPDATE table SET uint64 = 0x3E8 
SELECT uint64, cast(uint64 as bigint) FROM table 

은, 그러나, 확인 (0x00000000000003E8 1000을 반환) 작동하는 것 같다 , Entity Framework에 의해 생성 된 SQL은 첫 번째 업데이트 문을 실행하는 것으로 보입니다 (필자는 ulong 변수를 변환 할 때 BitConverter.ToBytes()를 사용합니다).

SQL Server에 부호없는 64 비트 정수를 저장하려는 경우 가장 좋은 방법입니까? BitConverter를 사용하는 것보다 더 좋은 옵션이 있습니까? (적절한 수의 0으로 LPAD를 정렬하는 것 이외에)

답변

1

저는 적어도 varbinary 필드를 살펴볼 것입니다. 왜냐하면 당신은 BIGINT에 서명되지 않은/서명 된 이런 종류의 문제를 많이 가질 것이기 때문입니다.

+0

나는 BIGINT 데이터 유형을 사용하지 않는만큼 큰 것으로 쪽을 선택합니다 .. 나는 바이너리 (8)를 사용하고있다. 바이너리와 varbinary의 차이점은 무엇입니까? – Langdon

+0

어, Google에서 그렇게 할 수있을 것 같습니다. varbinary (8)은 제대로 작동하는 것으로 보이며 같은 동작을 나타내지 않습니다. 감사! – Langdon

3

당신은> 확인하기 위해 소수 (p, 0) 점검 제한 조건을 사용할 수 = 0

당신의 양의 정수