2010-01-27 24 views
1

我試圖存儲和檢索使用Microsoft SQL Server(並最終使用ADO.NET EF)的unsigned int64,但我遇到了一些麻煩。既然你不能指定一個整數列作爲無符號SQL Server中,我嘗試使用二進制(8),但是這不符合我的預期。下面的查詢將導致意外值(0x03E8000000000000和281474976710656000):在SQL Server中使用未簽名的BIGINT

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

如果我運行下面的,但是,它似乎工作正常(返回0x00000000000003E8,1000):

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

但不幸的是,實體框架創建的SQL似乎運行第1條更新語句(我在轉換我的ulong變量時使用了BitConverter.ToBytes())。

這是我最好的選擇,如果我想在SQL Server中存儲一個無符號的64位整數?有沒有比使用BitConverter更好的選擇(除了寫我自己的LPAD陣列與適當數量的零)?

回答

1

我至少會看varbinary字段,因爲你將會遇到很多這類帶有unsigned/signed到BIGINT的問題。

+0

我不使用的數據類型BIGINT足夠大..我正在使用二進制(8)。二進制和varbinary有什麼區別? – Langdon 2010-01-27 12:37:47

+0

呃,我想我可以Google。 varbinary(8)似乎工作正常,並沒有表現出相同的行爲。謝謝! – Langdon 2010-01-27 12:43:56

3

你可以使用十進制(P,0),並檢查約束,以確保> = 0

選擇P設爲您正整數