查询所有表中是否存在指定的列,列可以包含个

时间:2021-04-14 21:53:04
现在要查询数据库SZ中的所有表当中是否包含指定的列,指定的列存在就用Y,不存在用N;

例如我现在要查询所有表是否包含列A,B,C的, ABC为界面文本框输入的
数据显示结果如下图:

TableName      A      B     C
     表1              Y      N     Y
     表2              Y      Y     Y
     表3              N      N     N
     表4              N      N     Y

5 个解决方案

#1


select t.name, c.name
from sys.columns c inner join sys.tables t on c.object_id=t.object_id


上述语句你可以得到所有的表名及列名,然后进行统计。生成交叉表有许多方法。

#2


楼上+1.......

#3


1楼大神  这个语句我也写出来了     但是这种一传条件(指定的列)就只有几条数据了,   我要的是传了筛选条件结果集依然是所有表,然后表中含有的就是‘Y’,不存在的就显示‘N’,应该用到groupby语句   但写不出来

#4


可以考虑下面的sql,只需要改一下参数'A'就可以查询其他列的情况

select tablename,
case when fieldname is null then 'N' else 'Y' end as A
from (
select a.name as tablename,b.name as fieldname
 from (select * from sys.objects where type='u') a 
left join sys.columns b on a.object_id=b.object_id 
and b.name='A'
) c

#5


引用 4 楼 reenjie 的回复:
可以考虑下面的sql,只需要改一下参数'A'就可以查询其他列的情况

select tablename,
case when fieldname is null then 'N' else 'Y' end as A
from (
select a.name as tablename,b.name as fieldname
 from (select * from sys.objects where type='u') a 
left join sys.columns b on a.object_id=b.object_id 
and b.name='A'
) c


我试了,一个字段是可以的,但是输入多个结果集就不对了

#1


select t.name, c.name
from sys.columns c inner join sys.tables t on c.object_id=t.object_id


上述语句你可以得到所有的表名及列名,然后进行统计。生成交叉表有许多方法。

#2


楼上+1.......

#3


1楼大神  这个语句我也写出来了     但是这种一传条件(指定的列)就只有几条数据了,   我要的是传了筛选条件结果集依然是所有表,然后表中含有的就是‘Y’,不存在的就显示‘N’,应该用到groupby语句   但写不出来

#4


可以考虑下面的sql,只需要改一下参数'A'就可以查询其他列的情况

select tablename,
case when fieldname is null then 'N' else 'Y' end as A
from (
select a.name as tablename,b.name as fieldname
 from (select * from sys.objects where type='u') a 
left join sys.columns b on a.object_id=b.object_id 
and b.name='A'
) c

#5


引用 4 楼 reenjie 的回复:
可以考虑下面的sql,只需要改一下参数'A'就可以查询其他列的情况

select tablename,
case when fieldname is null then 'N' else 'Y' end as A
from (
select a.name as tablename,b.name as fieldname
 from (select * from sys.objects where type='u') a 
left join sys.columns b on a.object_id=b.object_id 
and b.name='A'
) c


我试了,一个字段是可以的,但是输入多个结果集就不对了