Я пытаюсь протестировать, если данное ограничение по умолчанию существует. Я не хочу использовать sysobjects таблицу, но более стандартный INFORMATION_SCHEMA.
Я использовал это для проверки на таблицы и ограничения первичного ключа прежде, но я не вижу ограничения по умолчанию нигде.
Они не там? (Я использую SQL Server 2000 MS).
Править: Я надеюсь добираться под названием ограничение.
Вероятно, потому что на части другого SQL DBMSs "ограничение по умолчанию" не является действительно ограничением, Вы не найдете его имя в "INFORMATION_SCHEMA.TABLE_CONSTRAINTS", таким образом, Ваш лучший выбор будет "INFORMATION_SCHEMA.COLUMNS", как другие уже упомянули.
(SQLServer-невежда здесь)
единственное причина я могу думать, когда необходимо знать, что "ограничение по умолчанию" имя состоит в том, если SQLServer не поддерживает "ALTER TABLE xxx ALTER COLUMN yyy SET DEFAULT..."
команда. Но тогда Вы уже находитесь в нестандартной зоне, и необходимо использовать особенные методы продукта получить то, в чем Вы нуждаетесь.
Я не думаю, что это находится в INFORMATION_SCHEMA - Вы должны будете, вероятно, использовать sysobjects или связали удержанные от использования таблицы/представления.
Вы думали бы, что будет тип для этого в INFORMATION_SCHEMA.TABLE_CONSTRAINTS, но я не вижу тот.
Кажется, нет никаких Ограничительных имен По умолчанию в Information_Schema
представления.
использование SELECT * FROM sysobjects WHERE xtype = 'D' AND name = @name
для нахождения ограничения по умолчанию по имени
Можно использовать следующее для сужения результатов еще больше путем определения Имени таблицы и Имени столбца, к которому коррелирует Ограничение По умолчанию:
select * from sysobjects o
inner join syscolumns c
on o.id = c.cdefault
inner join sysobjects t
on c.id = t.id
where o.xtype = 'D'
and c.name = 'Column_Name'
and t.name = 'Table_Name'
Столбец COLUMN_DEFAULT INFORMATION_SCHEMA.COLUMNS то, что Вы ищете?
Как насчет использования комбинации 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
select c.name, col.name from sys.default_constraints c
inner join sys.columns col on col.default_object_id = c.object_id
inner join sys.objects o on o.object_id = c.parent_object_id
inner join sys.schemas s on s.schema_id = o.schema_id
where s.name = @SchemaName and o.name = @TableName and col.name = @ColumnName