Regarding bit columns:
Bit columns can, but won't necessarily save you space. Although SQL Server can fit 8 bit columns into a single byte, my understanding is that if you have less than 8 columns, SQL Server will still reserve a whole byte. What is more, you won't be able to use all of that byte, so it becomes wasted space. In addition, bit columns cannot have indexes on them.
For these reasons, I would tend to suggest that if you're not going to have a full 8-based number of bit columns (e.g. 8 bit columns, 16 bit columns, 32 bit columns, etc.), I would suggest using some sort of integer column instead. For example, if you only have one column that you want to store boolean data in, then I would make it a TINYINT column and convert your boolean values to 0, 1, or whatever else you want. Personally, I'd use bitmasking to mask off a single bit in the column for each particular boolean value I'd like to store in it. This adds a lot of flexibility and expandability as well. This is also similar to what Microsoft uses in its own system tables. A purist might point out that this violates the first normal form; oh well.
If you decide in the future that you want to store additional boolean information, you can just expand the values that are allowed in the column, using bitmasking techniques, as I suggested, to specify that each bit in the column stands for one particular boolean value. Besides the space savings, the integer-type column will be indexable.
Edited by - mdburr on 08/09/2001 5:23:46 PM