如何获取SQL表列的约束

时间:2013-09-04 19:28:47

标签: sql sql-server

我的表格中有一个名为MealTypeVARCHAR)的列,CHECK

{"Veg", "NonVeg", "Vegan"}约束

那将照顾插入。

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

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

4 个答案:

答案 0 :(得分:22)

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

sp_help 'TableName'

答案 1 :(得分:14)

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

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

可以用以下代码替换select语句:

select substring(chk.Definition,2,3),substring(chk.Definition,9,6),substring(chk.Definition,20,5) 

答案 2 :(得分:1)

您可以使用

sp_helpconstraint 'tableName', 'nomsg'

获取表的所有约束。

“ sp_help”返回更多信息。

答案 3 :(得分:0)

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'