Как найти ограничение по умолчанию, используя INFORMATION_SCHEMA? - PullRequest
104 голосов
/ 27 сентября 2008

Я пытаюсь проверить, существует ли данное ограничение по умолчанию. Я не хочу использовать таблицу sysobjects, но более стандартную INFORMATION_SCHEMA.

Я использовал это для проверки таблиц и ограничений первичного ключа ранее, но я нигде не вижу ограничений по умолчанию.

Их там нет? (Я использую MS SQL Server 2000).

РЕДАКТИРОВАТЬ: я ищу, чтобы получить имя ограничения.

Ответы [ 13 ]

0 голосов
/ 27 мая 2009

Как насчет использования комбинации CHECK_CONSTRAINTS и CONSTRAINT_COLUMN_USAGE:

    select columns.table_name,columns.column_name,columns.column_default,checks.constraint_name
          from information_schema.columns columns
             inner join information_schema.constraint_column_usage usage on 
                  columns.column_name = usage.column_name and columns.table_name = usage.table_name
             inner join information_schema.check_constraints checks on usage.constraint_name = checks.constraint_name
    where columns.column_default is not null
0 голосов
/ 27 сентября 2008

Возможно, потому что в некоторых других СУБД SQL «ограничение по умолчанию» на самом деле не является ограничением, вы не найдете его имя в «INFORMATION_SCHEMA.TABLE_CONSTRAINTS», поэтому лучше всего ставить «INFORMATION_SCHEMA.COLUMNS», как это делают другие уже упоминалось.

(SQLServer-ignoramus здесь)

Единственная причина, по которой я могу придумать, когда вам нужно знать имя «ограничения по умолчанию», заключается в том, что SQLServer не поддерживает команду "ALTER TABLE xxx ALTER COLUMN yyy SET DEFAULT...". Но тогда вы уже находитесь в нестандартной зоне, и вам нужно использовать специфичные для продукта способы, чтобы получить то, что вам нужно.

0 голосов
/ 27 сентября 2008

Я не думаю, что это в INFORMATION_SCHEMA - вам, вероятно, придется использовать системные объекты или связанные устаревшие таблицы / представления.

Вы могли бы подумать, что в INFORMATION_SCHEMA.TABLE_CONSTRAINTS будет тип для этого, но я его не вижу.

...