• This looks like a pretty good solution. I will play with it.

    CREATE TABLE dbo.Flags

    (

    position INT NOT NULL PRIMARY KEY CLUSTERED CHECK (position BETWEEN -1 AND 15),

    bit_value INT NOT NULL UNIQUE NONCLUSTERED,

    CHECK (bit_value = POWER(2, position) OR (position = -1 AND bit_value = 0))

    );

    GO

    -- Add 16 bits plus a placeholder to allow unset bits

    INSERT dbo.Flags (position, bit_value)

    SELECT TOP (16)

    ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1 AS position,

    POWER(2, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1) AS bit_value

    FROM master.sys.columns

    UNION ALL

    SELECT -1, 0 -- for unset bits

    GO