Вы можете использовать этот запрос:
Select Query =
'If EXISTS (Select * FROM sys.foreign_keys Where '
+ ' object_id = OBJECT_ID(N''' + QUOTENAME(OBJECT_SCHEMA_NAME(fk.parent_object_id)) + '.' + QUOTENAME(fk.name) + ''')'
+ ' And parent_object_id = OBJECT_ID(N''' + QUOTENAME(OBJECT_SCHEMA_NAME(fk.parent_object_id)) + '.' + OBJECT_NAME(fk.parent_object_id) + ''')) ' +
'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(fk.parent_object_id))
+ '.' + QUOTENAME(OBJECT_NAME(fk.parent_object_id))
+ ' DROP CONSTRAINT ' + QUOTENAME(fk.name) + '; '
, [Schema] = sh.name, [Table] = OBJECT_NAME(fk.parent_object_id), [Constraint] = ob.name
From sys.foreign_keys as fk
Inner Join sys.objects as ob on ob.object_id = fk.parent_object_id
Inner Join sys.schemas as sh on ob.schema_id = sh.schema_id
Where ob.name in ('xxx', 'yyy');
Он будет:
- Капли ограничение запрос имя
- схемы
- Наименование таблицы
- имя Constraint
Вы можете dynamicaly выполнять запросы в первом столбце:
Exec sp_executesql @sql
Где @sql приходит из колонки запросов. Как только ограничения были удалены, вы можете удалить таблицу.
Возможный дубликат [SQL DROP TABLE ограничение внешнего ключа] (http://stackoverflow.com/questions/1776079/sql-drop-table-foreign-key-constraint) – Peter
первое падение ограничение чем стол. –