>I need to record a 4 bytes unsigned value in my table (range 0 - 4,294,967,295). Currently I am using bigint to represent this value but I am wasting around 3 bytes per record (especially considering that a record is 2100 bytes).
>
>Anywho, do I have any other options than to use bigint? Does MSSQL have an unsigned field type?
>I know I could use binary(4) but the field is PK so I would like it to be a "visible" type.
>
>Are there any problems using binary(x) as PK?
>
>I just had a lot of thoughts running through my head while eating lunch.
>
>Einar
Einar,
You can store 4 unsinged bytes in an int column if you do some casting:
select cast(4294967295 as binary(8))
select cast(cast(4294967295 as binary(8)) as char(8))
select right(cast(cast(4294967295 as binary(8)) as char(8)), 4)
select cast(right(cast(cast(4294967295 as binary(8)) as char(8)), 4) as binary(4))
select cast(cast(right(cast(cast(4294967295 as binary(8)) as char(8)), 4) as binary(4)) as int)