• You can simulate this with dynamic SQL - it's messy, but it works.

    with Desired_Columns as (

    select s.name as SchemaName

    , t.name as TableName

    , c.name as ColumnName

    , ROW_NUMBER() OVER (ORDER BY s.name, t.name, c.name) as Row_Num

    from sys.columns c

    inner join sys.tables t

    on c.object_id = t.object_id

    inner join sys.schemas s

    on s.schema_id = t.schema_id

    inner join sys.types ty

    on c.system_type_id = ty.system_type_id

    -- Put in desired datatypes here

    where ty.name in ('bit','int')

    ),

    InnerQuery as (

    select 'select ''' + ColumnName + ''' as ColName '

    + ', ''' + SchemaName + '.' + TableName + ''' as TableName '

    + ', case when exists (select 1 from ' + SchemaName + '.'

    + TableName + ' where ' + ColumnName + ' = 1) then '

    + '''True'' '

    + 'else NULL end as Has_1 '

    + case when exists (

    select 1

    from Desired_Columns b

    where a.Row_Num < b.Row_Num )

    then 'UNION ALL'

    else ''

    end as Query

    , Row_Number() OVER (ORDER BY SchemaName, TableName, ColumnName) as Row_Num

    from Desired_Columns a

    ),

    OuterQuery as (

    select 'select ColName, TableName from (' as Query

    , 0 as Row_Num

    union all

    select ') t0 where t0.Has_1 is not null ' as Query

    , (select max(Row_Num) from InnerQuery) + 1 as Row_Num

    ),

    WholeQuery as (

    select *

    from OuterQuery

    union all

    select *

    from InnerQuery

    )

    select Query

    from WholeQuery

    order by Row_Num

    The output of THAT should be something you can copy and paste to get a list of columns. You could potentially use exec() to run the output automatically - my solution is usually good enough for me.