mou*_*aim 2 sql-server-2008 sql-server
我想计算数据库中非空约束的列数。于是想到了查询表sys.all_columns:
select * from sys.all_columns
问题是它为我提供了我不需要的额外信息(系统定义表中的列)。
所以我必须添加一些SQL 代码来确定某些列是否属于用户定义表。最好的方法是什么?
在sys.columns
和之间进行内连接sys.tables
。后一个表是用户表的目录视图,所以加入object_id
应该给你相应的列:
select c.*
from sys.columns c
inner join sys.tables t
on c.object_id = t.object_id;
Run Code Online (Sandbox Code Playgroud)
进一步了解最终结果,如果您想获取用户表中的所有可为空的列,这个快速查询应该可以工作:
select
object_name =
quotename(s.name) +
'.' +
quotename(t.name),
column_name = quotename(c.name),
c.is_nullable
from sys.columns c
inner join sys.tables t
on c.object_id = t.object_id
inner join sys.schemas s
on t.schema_id = s.schema_id
where c.is_nullable = 1;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1297 次 |
最近记录: |