【发布时间】:2009-07-11 11:14:48
【问题描述】:
如何在整个数据库的插入中找出允许为NULL值的列?
【问题讨论】:
-
您可能/可能不希望排除那些不能作为检查约束的空 b/c 的。这可能会导致:stackoverflow.com/a/3195136/420667、Substring 和 CharIndex 可用于从定义中获取列名。
标签: sql sql-server null constraints
如何在整个数据库的插入中找出允许为NULL值的列?
【问题讨论】:
标签: sql sql-server null constraints
我手头没有 sql,但查询是这样的
SELECT * FROM information_schema.columns WHERE is_nullable = 'YES'
一般来说,搜索这个标准视图,以获取有关您的架构和数据库结构的所有元数据信息;还有很多其他的(information_schema.tables、information_schema.constraints 等)
【讨论】:
只想查看基表中的列(而不是视图)的用户应加入INFORMATION_SCHEMA.TABLES。我也喜欢排除系统表sysdiagrams。
查询
SELECT
c.TABLE_NAME,
COLUMN_NAME,
DATA_TYPE
FROM
INFORMATION_SCHEMA.COLUMNS AS c
JOIN INFORMATION_SCHEMA.TABLES AS t ON t.TABLE_NAME = c.TABLE_NAME
WHERE
is_nullable = 'YES' AND
TABLE_TYPE = 'BASE TABLE' AND
c.TABLE_NAME != 'sysdiagrams'
ORDER BY
c.TABLE_NAME,
COLUMN_NAME
如果您在架构或表目录中有重复的表名,您也应该在连接中包含这些字段,如下面的答案所示:
Differentiating tables and views in INFORMATION_SCHEMA.COLUMNS.
【讨论】: