【问题标题】:SQL Server: How can I check to see if a field has a "NULL" or "NOT NULL" constraint in place?SQL Server:如何检查字段是否存在“NULL”或“NOT NULL”约束?
【发布时间】:2012-06-20 23:59:37
【问题描述】:

谁能告诉我是否有办法以编程方式确定 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 标志,就可以了

标签: sql sql-server database constraints


【解决方案1】:

你可以看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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 2014-11-27
      • 2012-01-29
      • 1970-01-01
      • 2015-09-25
      • 2021-03-04
      相关资源
      最近更新 更多