sqlsql-server-ce

Reverse boolean (bit) value in SQL CE select statement


I am trying to write a query that gets table information from a SQL CE database, ready to be put in c#, later to be exported to XML. I need one of the columns to be named 'IDENT' with a boolean value (to represent whether or not it is the identity column, obviously).

For this, I am checking if the AUTOINC_SEED column is null, as follows:

select isnull(AUTOINC_SEED) as IDENT from information_schema.columns

However, this returns TRUE for non-identity columns and FALSE for identity columns! Is there any way to reverse the boolean value inside the select statement?

Edit: I'm aware I could do a case statement to solve this particular problem, but it got me curious about inverting boolean (bit) values in SQL.


Solution

  • The carat (^) in SQL Server is the bitwise exclusive OR operator.

    Since 1 ^ 1 equals 0, and 1 ^ 0 equals 1, you can just do:

    SELECT (1 ^ [YourBitColumn]) as InverseBit
    

    I don't have SQL CE handy either, but since SQL CE appears to have this, I believe the following query should do the trick:

    select (1 ^ AUTOINC_SEED) as IDENT from information_schema.columns