You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure SQL托管实例中查找显式命名的NOT NULL约束?

查找Azure SQL托管实例中的显式命名NOT NULL约束

在Azure SQL托管实例(以及SQL Server体系)中,显式命名的NOT NULL约束确实归属于CHECK约束范畴,但直接查询sys.objects的CHECK_CONSTRAINT类型可能因缺少精准过滤或关联而无法定位目标约束。以下是两种有效的查询方案:

方法一:通过sys.check_constraints视图查询

该视图专门存储CHECK约束(含显式NOT NULL约束)的详细信息,关联表和列信息后可精准定位目标约束:

SELECT 
    cc.name AS constraint_name,
    t.name AS table_name,
    c.name AS column_name,
    cc.definition
FROM 
    my_db.sys.check_constraints cc
JOIN 
    my_db.sys.tables t ON cc.parent_object_id = t.object_id
JOIN 
    my_db.sys.columns c ON cc.parent_object_id = c.object_id 
    AND cc.parent_column_id = c.column_id
WHERE 
    cc.name = 'nn_my_table_my_column';

方法二:关联sys.objects与表、列信息查询

显式NOT NULL约束在sys.objects中的类型标识为C(对应type_desc为CHECK_CONSTRAINT),通过关联表和列信息可筛选出目标约束:

SELECT 
    o.name AS constraint_name,
    t.name AS table_name,
    c.name AS column_name
FROM 
    my_db.sys.objects o
JOIN 
    my_db.sys.tables t ON o.parent_object_id = t.object_id
JOIN 
    my_db.sys.columns c ON o.parent_object_id = c.object_id 
    AND o.parent_column_id = c.column_id
WHERE 
    o.type = 'C'
    AND o.name = 'nn_my_table_my_column';

补充说明

此前查询sys.objects未返回结果,大概率是因为未添加约束名称过滤或关联表信息,导致目标约束被其他CHECK约束淹没,或是未指定正确的数据库前缀。执行上述带精准过滤的查询即可定位目标NOT NULL约束。

内容的提问来源于stack exchange,提问作者skyline01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:45:59