Получение информации об ограничениях по умолчанию

#sql #sql-server #sql-server-2008 #tsql

#sql #sql-сервер #sql-server-2008 #tsql

Вопрос:

Я пытаюсь получить информацию об ограничениях по умолчанию для данной таблицы. Я написал что-то вроде этого:

 SELECT  c.name ,
        col.name
FROM    Rem.sys.default_constraints c
        INNER JOIN Rem.sys.columns col ON col.default_object_id = c.object_id
        INNER JOIN Rem.sys.objects o ON o.object_id = c.parent_object_id
        INNER JOIN Rem.sys.schemas s ON s.schema_id = o.schema_id       
WHERE   s.name = 'dbo'
        AND o.name = 'Desk_Hist'
  

Но это не возвращает мне значение по умолчанию. Итак, я попробовал другой способ, и запрос:

 SELECT *
                FROM    Rem.information_schema.columns columns
                WHERE   columns.table_catalog = 'Rem'
                        AND columns.table_schema = 'dbo'
                        AND columns.table_name = 'Desk_Hist'
                        AND COLUMN_DEFAULT IS NOT NULL  
  

Но это ничего мне не возвращает.

Кто-нибудь может мне помочь в этом?

Ответ №1:

Значение по умолчанию находится в столбце «определение», попробуйте выполнить запрос без указания where:

 SELECT  c.name , 
        col.name, 
        c.definition
FROM    Rem.sys.default_constraints c 
        INNER JOIN Rem.sys.columns col ON col.default_object_id = c.object_id 
        INNER JOIN Rem.sys.objects o ON o.object_id = c.parent_object_id 
        INNER JOIN Rem.sys.schemas s ON s.schema_id = o.schema_id 
  

Комментарии:

1. van c.определение возвращает мне значение Null

Ответ №2:

Ваш первый запрос должен сработать, но вы включаете только имя ограничения, ничего больше, из таблицы ограничений ( c.name ).

Попробуйте включить c.definition в свой список выбора