有没有人可以告诉我是否有办法以编程方式确定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字段约束。任何帮助将不胜感激。
答案 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'