Я хотел бы удалить ограничение на столбец в нескольких базах данных. Я не знаю точного названия ограничения столбца.
Можно ли удалить ограничение, не зная его имени.
Бывший: ALTER TABLE TempTable DROP CONSTRAINT IF EXISTS ON Columnname
вы можете получить информацию об ограничениях из таблицы, подобной этой
select t.Name as TableName,
ccd.Name as ColumnName_default_constraint,
dc.Name as default_constraint,
ccc.Name as ColumnName_check_constraint,
cc.Name as check_constraint
from sys.tables t
inner join sys.default_constraints dc on t.object_id = dc.parent_object_id
inner join sys.check_constraints cc on t.object_id = cc.parent_object_id
inner join sys.columns ccd on dc.parent_object_id = ccd.object_id
and ccd.column_id = dc.parent_column_id
inner join sys.columns ccc on cc.parent_object_id = ccc.object_id
and ccc.column_id = cc.parent_column_id
where t.Name = 'your table name'
order by t.Name
из этого вы можете создавать такие сценарии
select 'alter table ' + t.Name +' drop constraint ' + dc.Name,
'alter table ' + t.Name +' drop constraint ' + cc.Name
from sys.tables t
inner join sys.default_constraints dc on t.object_id = dc.parent_object_id
inner join sys.check_constraints cc on t.object_id = cc.parent_object_id
where t.Name = 'your table name'
order by t.Name
Я отредактировал свой ответ, первая версия показывала только ограничения по умолчанию, теперь также будут отображаться контрольные ограничения.
В таблице может быть много ограничений, я хотел бы получить имя ограничения для определенного столбца.
@Ask_SO Я отредактировал свой ответ, теперь в первом запросе также будет отображаться имя столбца, на котором установлено ограничение.
Рекомендуется явно называть ограничения при их создании, чтобы вы могли использовать это имя для будущих изменений. Это особенно важно, если у вас есть несколько клиентов с собственной базой данных, чтобы вы могли автоматизировать изменения, используя один и тот же сценарий.