【问题标题】:How to determine if a field is set to not null?如何确定字段是否设置为非空?
【发布时间】:2009-04-30 17:52:23
【问题描述】:

我部署了一个现有程序,其中一些客户数据库的字段设置为不为空,而另一些则可以为空。我需要运行一个补丁来更正数据库,以便该列可以为空,但不需要对所有数据库运行它,只需要对不正确的数据库运行它。是否有一种简单的方法可以在 SQL Server 中用于执行此检查?最好是可以作为 SQL 脚本的一部分运行的东西。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    查看 INFORMATION_SCHEMA 视图。例如:

    SELECT
         IS_NULLABLE
    FROM
         My_DB.INFORMATION_SCHEMA.COLUMNS
    WHERE
         TABLE_SCHEMA = 'dbo' AND
         TABLE_NAME = 'My_Table' AND
         COLUMN_NAME = 'My_Column'
    

    IS_NULLABLE 将是“YES”或“NO”。

    【讨论】:

      【解决方案2】:
      select Table_Name, Column_Name, Is_Nullable
      from information_schema.columns
      

      将为您提供该信息

      【讨论】:

      • 你能评论一下为什么 information_schema.columns 比 syscolumns 更好吗?老实说,我不知道,不是敌对的。
      • 当然,我会说,在可能的情况下,模式视图是更可取的,因为 1. 它们比系统表(例如 sys.objects 与 sysobjects)更不容易更改,2. 它们倾向于有用地聚合系统表信息(例如外键引用)
      • 另一个重要的一点是它们符合 SQL-92 ANSI 标准。 sys.objects 等表是 Microsoft 特定的。
      【解决方案3】:
      select isnullable from syscolumns where name = 'status'
      

      【讨论】:

      • 这个查询需要有额外的where子句项,就好像有多个带有状态列的表一样,你会得到多个结果。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多