2015-11-02 1 views
0

Как я могу удалять таблицы с ограничениями,Как удалить таблицу с ограничениями в Microsoft SQL?

use my_db0 


if exists(select* from sys.tables where name='Tbl1') 
drop table Tbl1 --cascade constraints; 


Create table Tbl1(
nameID int primary key 
) 


if exists (select* from sys.tables where name='Tbl2') 
drop table Tbl2 


Create table Tbl2(
lastNameID int primary key, 
nameID int foreign key references Tbl1(nameID) 
) 
+1

Возможный дубликат [SQL DROP TABLE ограничение внешнего ключа] (http://stackoverflow.com/questions/1776079/sql-drop-table-foreign-key-constraint) – Peter

+1

первое падение ограничение чем стол. –

ответ

0

Вы можете использовать этот запрос:

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 приходит из колонки запросов. Как только ограничения были удалены, вы можете удалить таблицу.

1

В таблице Tbl2 содержит NameID в качестве внешнего ключа, так что вы должны сначала стереть данные в Tbl2, а затем падение tbl1

if exists (select* from sys.tables where name='Tbl2') 
drop table Tbl2 

if exists(select* from sys.tables where name='Tbl1') 
drop table Tbl1 
Смежные вопросы