У меня есть таблица инструкторов со столбцом FileId, который соответствует файлу в таблице Files. Когда он/она заменяет файл, я хочу, чтобы он мог уйти и удалить старый. Я НЕ хочу удалить запись Instructor, просто файл. Когда я отредактировал отношения так, чтобы они разрешали каскады при обновлении и удалении, а затем я запустил хранимый процесс, который он удалил в записи инструктора, что не является желаемым эффектом, сообщите мне, если у вас есть какие-либо предложения. Спасибо за вашу помощьУдаление строки с ограничением внешнего ключа
ALTER PROC [dbo].[Files_DeleteByInstructorFileId]
@Id int,
@FileId int = NULL
as
begin
/*
EXECUTE [dbo].[Files_DeleteByInstructorFileId] 162
*/
Update [dbo].[Instructors] SET
FileId = @FileId
WHERE @Id = Id
DELETE f FROM [dbo].[Files] f
JOIN [dbo].[Instructors] ins
ON ins.FileId = f.Id
WHERE ins.Id = @Id
END
Так что я очень новичок в изучении SQL, поэтому вы говорите, что после обновления дизайна отношений я должен добавить то, что вы написали выше в хранимую процедуру вместо используемой мной логики удаления? – ranah
Вы можете написать тот же запрос, чтобы удалить строку, но когда вы делаете внешний ключ, тогда по умолчанию он отключен или NO ACTION при удалении/обновлении. теперь вы должны изменить его на CASCADE, тогда он позволит удалить столбец с ссылкой. Вы можете увидеть свое текущее действие, используя запрос SHOW CREATE TABLE TABLE_NAME –
Привет, опять же, когда я пробовал это, все закончилось тем, что вся запись инструктора была удалена. Я пытаюсь просто удалить файл из таблицы файлов, который соответствует этому конкретному преподавателю, но не удалять инструктора, если это имеет смысл ... – ranah