Удаленная таблица SQL Server - PullRequest
       1

Удаленная таблица SQL Server

4 голосов
/ 10 сентября 2010

Если вы удалите таблицу в SQL Server, на которой есть ключи, индексы, ограничения и т. Д., Она также удалит их? Мне было просто интересно, когда я создаю свои сценарии, нужно ли мне создавать сценарии удаления для всех них, или я могу просто удалить таблицы?

Спасибо

S

1 Ответ

8 голосов
/ 10 сентября 2010

Да, хотя вы не можете удалить таблицу, на которую ссылается внешний ключ, в другой таблице.

Вот процедура удаления таблицы с внешними ключами, которая ссылается на нее в SQL Server 2008:

create table TA ( AID int identity(1, 1), OtherId int, Name varchar(512), constraint PK_TA primary key (AID))
create table TB ( BID int identity(1, 1), OtherId int, Name varchar(512), constraint PK_TB primary key (BID))
alter table TA add constraint FK_TA_TB foreign key (OtherId) references TB (BID)
alter table TB add constraint FK_TB_TA foreign key (OtherId) references TA (AID)

drop table ta -- doesn't work
drop table tb -- doesn't work

create procedure my_DropTable @tableName varchar(512) as
begin
    if OBJECT_ID(@tableName) is null begin print 'OBJECT DOES NOT EXIST' return end
    declare @sql nvarchar(max)
    while exists (select * from sys.foreign_keys where referenced_object_id = object_id(@tableName))
    begin
        select @sql = 'ALTER TABLE ' + OBJECT_NAME(parent_object_id) + ' DROP CONSTRAINT ' + OBJECT_NAME(object_id)
        from sys.foreign_keys where referenced_object_id = object_id(@tableName)

        exec sp_executesql @sql
    end
    set @sql = 'DROP TABLE ' + @tableName
    exec sp_executesql @sql
end

exec my_DropTable 'TA'
exec my_DropTable 'TB'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...