Oui, mais vous ne pouvez pas supprimer une table qui est référencée par une clé étrangère dans une autre table.
Voici une procédure de suppression d'une table avec des clés étrangères qui y font référence dans 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'
En effet si vous écrivez un script pour tout laisser tomber par exemple, vous devez le faire dans un tel un manière que vous laissez d'abord tomber les tables qui référencent les autres. – bjorsig
Yep a du sens, merci gusy – scarpacci
@bjorsig: Sauf si vous avez des références circulaires qui, d'après mon expérience, ne sont pas courantes. –