如何在 SQL 服务器中查找非空约束的名称

How to find the name of not-null constraints in SQL Server

如何在 SQL 服务器中找到命名的非空约束的名称?我可以找到检查约束、默认约束、FK 约束、PK 约束和唯一约束,但是 NN 约束让我望而却步。

你不能。

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

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 添加行。它只是存储为关联列的位 属性 而不是约束对象。

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

SELECT 
  table_catalog, table_schema, table_name, column_name, is_nullable

  FROM information_schema.columns 
  WHERE table_name = 'users'

List columns with not-null constraint

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 替换为 table 你的名字需要一个清单。

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