【发布时间】:2015-12-04 19:47:17
【问题描述】:
如何在 SQL Server 中找到命名的非空约束的名称?我可以找到检查约束、默认约束、FK 约束、PK 约束和唯一性约束,但 NN 约束却没有找到。
【问题讨论】:
标签: sql-server sql-server-2008 null constraints
如何在 SQL Server 中找到命名的非空约束的名称?我可以找到检查约束、默认约束、FK 约束、PK 约束和唯一性约束,但 NN 约束却没有找到。
【问题讨论】:
标签: sql-server sql-server-2008 null constraints
你不能。
虽然语法确实接受名称...
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 不会添加任何行。它只是存储为关联列的位属性,而不是约束对象。
【讨论】:
列出具有非空约束的列
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 行。
【讨论】:
您可以从信息_schema 中查询所有可以为空的列。这能得到你想要的吗?
SELECT
table_catalog, table_schema, table_name, column_name, is_nullable
FROM information_schema.columns
WHERE table_name = 'users'
【讨论】: