2016-11-05 2 views
1

я следующие SQL таблицы:Удалить все файлы в дочерних таблицах

create table dbo.Media ( 
    Id int identity not null 
    constraint PK_Media_Id primary key clustered (Id), 
    Created datetime not null, 
) 

create table dbo.MediaFile (
    MediaId int not null, 
    FileId int not null 
)  

create table dbo.[File] 
(
    Id int identity not null 
    constraint PK_File_Id primary key clustered (Id), 
    Content varbinary (max) filestream null 
    constraint DF_File_Content default (0x) 
) filestream_on [FILE] 

alter table dbo.MediaFile 
add constraint FK_MediaFile_MediaId foreign key (MediaId) references [Media](Id) on delete cascade on update cascade, 
    constraint FK_MediaFile_FileId foreign key (FileId) references [File](Id) on delete cascade on update cascade; 

Мне нужно удалить все медиа строки с датой Created старше 2 месяцев и MediaFile корреспонденты и строки файлов ... Так что у меня есть :

DELETE 
FROM dbo.Media 
WHERE Created < GETDATE() - 60 

Моя проблема заключается в том, чтобы убедиться, что все записи MediaFile и File удалены.

+0

Какова максимальная таблица родителей ваших трех таблиц? –

+0

Не связаны ли ссылочные ограничения 'DELETE CASCADE'? Я ожидаю, что убедитесь, что связанные строки удалены во время операции. –

+0

@DanGuzman Посмотрите внимательно, он удаляется из 'Media', а не' MediaFile'. –

ответ

0
delete [File] 
join MediaFile 
    on [File].Id = MediaFile.FileId 
join Media 
    on Media.ID = MediaFile.MediaId 
and Media.Created < GETDATE() - 60 

delete MediaFile 
join Media 
    on Media.ID = MediaFile.MediaId 
and Media.Created < GETDATE() - 60 
Смежные вопросы