我正在创建一个专辑和图片库作为目录的功能。基本上,企业可以创建相册,并将图像添加到这些相册中。
以下是我的表格:
我想创建一个在所有者删除相册时执行的存储过程。我这个程序的目标是清理表格。
DELETE FROM BD_Album WHERE AlbumID = @AlbumID --This is the obvious
DELETE FROM BD_Image WHERE ...
DELETE FROM BD_AlbumImage WHERE AlbumID = @AlbumID
我的困惑在于我还希望从BD_Image
表中删除与该相册相关联的所有图像。 (警告,删除此相册也会删除其中的所有图像。你确定吗?)
所有者可以根据自己的喜好创建尽可能多的相册。他们还可以通过表单中的列表框将图像分配给多个相册。
可能有点基本,但任何帮助都会受到赞赏。
答案 0 :(得分:0)
尝试
DELETE FROM BD_Image
WHERE ImageID IN
(SELECT ImageID FROM BD_AlbumImage WHERE AlbumID = @AlbumID
AND ImageID NOT IN
(SELECT ImageID FROM BD_AlbumImage WHERE AlbumID <> @AlbumID))
OR
DELETE FROM BD_Image
WHERE ImageID IN
(SELECT ImageID FROM BD_AlbumImage WHERE AlbumID = @AlbumID)
AND ImageID NOT IN
(SELECT ImageID FROM BD_AlbumImage WHERE AlbumID <> @AlbumID)
答案 1 :(得分:0)
您可以从SQL Server中的BD_IMAGE中删除相关记录,如下所示:
DELETE BD_IMAGE
FROM
BD_IMAGE i
JOIN BD_AlbumImage ai
ON i.ImageID = ai.ImageID
WHERE
ai.AlbumID = @AlbumID
答案 2 :(得分:0)
试试这样。
delete from BD_Album a,BD_Image i,BD_AlbumImage ai where a.AlbumID = @AlbumID
and ai.AlbumID =a.AlbumID and i.ImageID=ai.ImageID;
答案 3 :(得分:0)
您设置表格的方式允许图像在同一个相册中多次存在。如果您只想在相册中输入1个图像,则BD_AlbumImage表中不需要EntryId列,您可以只使用AlbumId和ImageId,这两个外键都可以构成该表的PrimaryKey。很酷的是,你可以在它上面添加一个级联删除来自动删除这样的记录:
ALTER TABLE BD_AlbumImage
WITH CHECK ADD CONSTRAINT FK_BD_AlbumImage_BD_Album
FOREIGN KEY(AlbumID) REFERENCES BD_Album (AlbumID) ON DELETE CASCADE
使用级联你不需要运行最后一个Delete.And然后你会说:但是,嘿我有没有相册的图像?是的,你可能。如果是我,我不会喜欢删除一个专辑删除其中的图像,我希望它们保留在某种收件箱中,但是如果你想清除没有任何标记的图像,你可以这样做:
DELETE FROM BD_Image
LEFT JOIN BD_AlbumImage ON BD_Image.ImageID = BD_AlbumImage.ImageID
WHERE BD_AlbumImage.AlbumID IS NULL
答案 4 :(得分:0)
delete from BD_Image where ImageID in(select ImageID from BD_AlbumImage where AlbumID=@AlbumID )
delete from BD_AlbumImage where AlbumID=@AlbumID
delete from BD_Album where AlbumID=@AlbumID