Как получить ограничения на столбец таблицы SQL

У меня есть столбец с именем MealType (VARCHAR) в моей таблице с ограничением CHECK для {"Veg", "NonVeg", "Vegan"}

Это позаботится о вставке.

Я хотел бы отобразить эти параметры для выбора, но я не смог выяснить SQL-запрос, чтобы узнать ограничения определенного столбца в таблице.

С первого взгляда на системные таблицы на сервере MS SQL, похоже, мне нужно будет использовать MS SQL API для получения информации. Я надеялся на сам запрос SQL, чтобы получить его.

Ответ 1

Этот запрос должен показать вам все ограничения в таблице:

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

Самый простой и быстрый способ - использовать:

sp_help 'TableName'

Ответ 3

Ты можешь использовать

sp_helpconstraint 'tableName', 'nomsg'

чтобы получить все ограничения для таблицы.

"sp_help" возвращает гораздо больше информации.

Ответ 4

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'