如何在 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 行。
如何在 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 行。