我有一个教师表,其中有一列FileId对应于Files表中的文件。当他/她替换一个文件时,我希望能够删除旧文件。我不想删除教师条目,只是文件。当我编辑关系,以便它允许更新和删除级联,然后我运行存储的proc下面它删除教师条目,这不是所需的效果,请让我知道如果您有任何建议。 感谢您的帮助使用外键约束删除行
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
您可以编写相同的查询来删除一行,但是当您创建外键时,默认情况下,它是RESTRICTED或NO ACTION删除/更新。现在您必须将其更改为CASCADE,然后它将允许删除引用的列。您可以使用查询SHOW CREATE TABLE TABLE_NAME看到您当前的操作。 –
嗨,再次尝试此操作时,最终发生的情况是整个教师条目被删除。我试图从文件表中删除对应于该特定教师的文件,但不删除教师,如果这是有道理的... – ranah