У меня есть следующий SQL Схему на SQL Server 2014 базы данных:Удаление строк старше 2 месяцев и каскадом до 3-х таблиц
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;
Я удаление всех средств массовой информации на строки старше 2-х месяцев, используя следующие:
DELETE
FROM dbo.Media
WHERE Created < GETDATE() - 60
Это удаляет MediaFile, потому что у меня есть на Delete Cascade, но не удаляет соответствующие файлы ...
Как я могу удалить СМИ, их медиафайлов и их файлы для г ows в СМИ старше 2 месяцев?
Похоже, что вы добавляете оба ограничения в ту же таблицу. Попробуйте добавить ограничение в таблицу файлов. –
[Также не используйте даты, такие как арифметические. Вместо этого используйте DateAdd.] (Http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx) –
On второй взгляд, похоже, вы настраиваете отношения многих и многих. Вот связанный с этим вопрос. http://stackoverflow.com/questions/1379333/how-to-cascade-delete-over-many-to-many-table –