如何获取SQL表列的约束

Raj*_*aja 11 sql sql-server

我的表中有一个名为MealType(VARCHAR)的列,带有CHECK约束{"Veg", "NonVeg", "Vegan"}

这将照顾插入.

我想显示这些选项供选择,但我无法找出SQL查询来找出表中特定列的约束.

从第一眼看到MS SQL服务器中的系统表,我似乎需要使用MS SQL的API来获取信息.我希望SQL查询本身能够得到它.

DaB*_*lue 26

最简单快捷的方法是使用:

sp_help 'TableName'
Run Code Online (Sandbox Code Playgroud)

  • 没关系,作者不希望以编程方式获取它们; 他们只想要一个关于限制的列表.如果您正在调整数据库或解决问题,那么sp_help是最简单的. (4认同)
  • 对于以编程方式获取信息来说,这是一个糟糕的解决方案。 (2认同)

org*_*ger 15

此查询应显示表上的所有约束:

select chk.definition
from sys.check_constraints chk
inner join sys.columns col
    on chk.parent_object_id = col.object_id
inner join sys.tables st
    on chk.parent_object_id = st.object_id
where 
st.name = 'Tablename'
and col.column_id = chk.parent_column_id
Run Code Online (Sandbox Code Playgroud)

可以用这个替换select语句:

select substring(chk.Definition,2,3),substring(chk.Definition,9,6),substring(chk.Definition,20,5) 
Run Code Online (Sandbox Code Playgroud)


Rav*_*bad 15

SELECT obj_table.NAME      AS 'table', 
        columns.NAME        AS 'column',
        obj_Constraint.NAME AS 'constraint',
        obj_Constraint.type AS 'type'

    FROM   sys.objects obj_table 
        JOIN sys.objects obj_Constraint 
            ON obj_table.object_id = obj_Constraint.parent_object_id 
        JOIN sys.sysconstraints constraints 
             ON constraints.constid = obj_Constraint.object_id 
        JOIN sys.columns columns 
             ON columns.object_id = obj_table.object_id 
            AND columns.column_id = constraints.colid 
    WHERE obj_table.NAME='table_name'
    ORDER  BY 'table'
Run Code Online (Sandbox Code Playgroud)


小智 9

您可以使用

sp_helpconstraint 'tableName', 'nomsg'
Run Code Online (Sandbox Code Playgroud)

获取表的所有约束。

“sp_help”返回更多信息。