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

4
请问是否有方法可以以编程方式确定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字段约束。非常感谢您的帮助。

只需检查IS_NULLABLE标志,那应该就可以了。 - Yusubov
2个回答

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

0
如果您使用的是SQL Server 2005+,则此代码将在存在NOT NULL约束时返回“NO”:
SELECT IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'tblName'
AND COLUMN_NAME = 'colName'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接