Насколько я понимаю, ограничения значений по умолчанию не являются частью стандарта ISO, поэтому они не отображаются в INFORMATION_SCHEMA. INFORMATION_SCHEMA кажется лучшим выбором для такого рода задач, потому что он кроссплатформенный, но если информация недоступна, следует использовать представления каталога объектов (sys. *) Вместо представлений системных таблиц, которые устарели в SQL Server. 2005 г. и позже.
Ниже почти то же самое, что и ответ @ user186476. Он возвращает имя ограничения значения по умолчанию для данного столбца. (Для пользователей, не использующих SQL Server, вам нужно имя по умолчанию, чтобы его отбросить, и если вы сами не назовете ограничение по умолчанию, SQL Server создаст какое-то сумасшедшее имя, например "DF_TableN_Colum_95AFE4B5". Чтобы упростить изменение свою схему в будущем, всегда явно указывайте свои ограничения!)
-- returns name of a column's default value constraint
SELECT
default_constraints.name
FROM
sys.all_columns
INNER JOIN
sys.tables
ON all_columns.object_id = tables.object_id
INNER JOIN
sys.schemas
ON tables.schema_id = schemas.schema_id
INNER JOIN
sys.default_constraints
ON all_columns.default_object_id = default_constraints.object_id
WHERE
schemas.name = 'dbo'
AND tables.name = 'tablename'
AND all_columns.name = 'columnname'
sys
таблиц и легко запоминается.Вы можете использовать следующее, чтобы еще больше сузить результаты, указав имя таблицы и имя столбца, с которыми коррелирует ограничение по умолчанию:
источник
Кажется, что в представлениях нет имен ограничений по умолчанию
Information_Schema
.используйте,
SELECT * FROM sysobjects WHERE xtype = 'D' AND name = @name
чтобы найти ограничение по умолчанию по имениисточник
В приведенном ниже сценарии перечислены все ограничения по умолчанию и значения по умолчанию для пользовательских таблиц в базе данных, в которой он выполняется:
источник
Если вы хотите получить ограничение по именам столбцов или таблиц или хотите получить все ограничения в базе данных, посмотрите другие ответы. Однако, если вы просто ищете именно то, что задает вопрос, а именно: «проверить, существует ли данное ограничение по умолчанию ... по имени ограничения» , то есть гораздо более простой способ.
Вот надежный ответ, который вообще не использует те
sysobjects
или иныеsys
таблицы:источник
источник
Столбец COLUMN_DEFAULT в INFORMATION_SCHEMA.COLUMNS то, что вы ищете?
источник
источник
Necromancing.
Если вам нужно только проверить, существует ли ограничение по
умолчанию ( ограничения по умолчанию могут иметь другое имя в плохо управляемых БД),
используйте INFORMATION_SCHEMA.COLUMNS (column_default):
Если вы хотите проверить только по имени ограничения:
И последнее, но не менее важное: вы можете просто создать представление
INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS:
источник
Я не думаю, что это в INFORMATION_SCHEMA - вам, вероятно, придется использовать sysobjects или связанные устаревшие таблицы / представления.
Можно подумать, что в INFORMATION_SCHEMA.TABLE_CONSTRAINTS есть тип для этого, но я его не вижу.
источник
Вероятно, потому что в некоторых других СУБД SQL «ограничение по умолчанию» на самом деле не является ограничением, вы не найдете его имени в «INFORMATION_SCHEMA.TABLE_CONSTRAINTS», поэтому лучше всего будет «INFORMATION_SCHEMA.COLUMNS», как уже упоминалось другими.
(SQLServer-ignoramus здесь)
Единственная причина, по которой я могу думать, когда вам нужно знать имя «ограничения по умолчанию», - это то, что SQLServer не поддерживает
"ALTER TABLE xxx ALTER COLUMN yyy SET DEFAULT..."
команду. Но тогда вы уже находитесь в нестандартной зоне, и вам нужно использовать специфические для продукта способы, чтобы получить то, что вам нужно.источник
Как насчет использования комбинации CHECK_CONSTRAINTS и CONSTRAINT_COLUMN_USAGE:
источник
Я использую следующий сценарий, чтобы получить все значения по умолчанию (sp_binddefaults) и все ограничения по умолчанию со следующими сценариями:
источник
Просмотр каталога объектов : sys.default_constraints
Представления информационной схемы
INFORMATION_SCHEMA
совместимы с ANSI, но ограничения по умолчанию не являются частью стандарта ISO. Microsoft SQL Server предоставляет представления системного каталога для получения информации о метаданных объекта SQL Server.sys.default_constraints
представление системного каталога, используемое для получения информации об ограничениях по умолчанию.источник