SQL Server:如何检查字段是否具有“NULL”或“NOT NULL”约束?

时间:2012-06-20 23:59:37

标签: sql sql-server database constraints

有没有人可以告诉我是否有办法以编程方式确定Micorosft SQL Server数据库表字段是否具有NULL或NOT NULL约束?我需要这个,以便我可以部署一个可以重新运行的安全补丁。所以我是在做这样的事情(概念/伪代码):

IF (my_table COLUMN end_date HAS CONSTRAINT OF 'NOT NULL') ALTER TABLE my_table ALTER COLUMN end_date DATETIME NULL

所以我想将my_table.end_date从'NOT NULL'更改为'NULL'(如果尚未更改)。我只是不确定括号中的部分应该是什么。

我知道如何查询dbo.sysobjects,例如现有字段,现有外键约束等(已经有几个线程),但我只是不确定如何专门检查NULL / NOT NULL字段约束。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

您可以查看INFORMATION_SCHEMA.COLUMNS

if (select IS_NULLABLE from INFORMATION_SCHEMA.COLUMNS 
    where TABLE_NAME='my_table' and COLUMN_NAME='end_date') = 'NO' 
begin
    ALTER TABLE my_table ALTER COLUMN end_date DATETIME NULL
end

答案 1 :(得分:0)

如果您使用的是SQL Server 2005+,如果存在NOT NULL约束,则返回“NO”:

SELECT IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'tblName'
AND COLUMN_NAME = 'colName'