【问题标题】:How to find the name of not-null constraints in SQL Server如何在 SQL Server 中查找非空约束的名称
【发布时间】:2015-12-04 19:47:17
【问题描述】:

如何在 SQL Server 中找到命名的非空约束的名称?我可以找到检查约束、默认约束、FK 约束、PK 约束和唯一性约束,但 NN 约束却没有找到。

【问题讨论】:

    标签: sql-server sql-server-2008 null constraints


    【解决方案1】:

    你不能。

    虽然语法确实接受名称...

    CREATE TABLE T
    (
    C INT CONSTRAINT NN NOT NULL
    )
    

    ...它被解析和验证为一个名称...

    CREATE TABLE T
    (
    C INT CONSTRAINT NN123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 NOT NULL
    )
    /* The identifier that starts with 'NN1234...6' is too long. Maximum length is 128. */
    

    ... 然后它会被忽略,实际上并没有存储在任何地方。

    与其他约束不同,sys.objects 不会添加任何行。它只是存储为关联列的位属性,而不是约束对象。

    【讨论】:

    • 我开始期待这可能是结果。非常令人失望,但我非常感谢您的帮助。
    【解决方案2】:

    列出具有非空约束的列

    DECLARE @Table NVARCHAR(MAX) = 'Your table name here'
    
    SELECT
        [COLUMN_NAME] AS [Column]
        --, [DATA_TYPE] AS [Type]
    FROM
        [INFORMATION_SCHEMA].[COLUMNS]
    WHERE
        [IS_NULLABLE] = 'NO'
        AND (@Table = '' OR [TABLE_NAME] = @Table)
    ORDER BY 
        [TABLE_NAME]
    

    备注

    • 将查询顶部第 1 行的 Your table name here 替换为您需要列表的表的名称。

    • 如果您还需要知道每列的数据类型,请通过删除行首的两个破折号来取消注释第 4 行。

    【讨论】:

      【解决方案3】:

      您可以从信息_schema 中查询所有可以为空的列。这能得到你想要的吗?

      SELECT 
        table_catalog, table_schema, table_name, column_name, is_nullable
      
        FROM information_schema.columns 
        WHERE table_name = 'users'
      

      【讨论】:

      • 不 - 我需要名字。谢谢。
      猜你喜欢
      • 2011-03-23
      • 2019-11-06
      • 2012-03-20
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多