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 字段约束。任何帮助将非常感激。

4

2 回答 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
于 2012-06-21T00:14:32.540 回答
0

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

SELECT IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'tblName'
AND COLUMN_NAME = 'colName'
于 2012-06-21T00:21:37.303 回答