0

我正在创建相册和图片库作为目录的功能。基本上,企业可以创建相册,并将图像添加到这些相册中。

这是我的表:

  • BD_Album(专辑 ID、所有者 ID、专辑名称)
  • BD_Image(ImageID、OwnerID、ImageFile、ImageTitle、ImageDescription、Active)
  • BD_AlbumImage(EntryID、AlbumID、ImageID)

我想创建一个在所有者删除相册时执行的存储过程。我对这个过程的目标是清理表格。

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表中删除与该专辑关联的任何图像。(警告,删除此相册也会删除其中的所有图片。您确定吗?)

所有者可以创建任意数量的专辑。他们还可以通过表单中的列表框将图像分配给多个相册。

可能有点初级,但任何帮助将不胜感激。

4

5 回答 5

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

使用级联,您不需要运行最后一个删除。然后您会说:但是,我将图像附加到没有相册?是的,你可能会。如果是我,我不喜欢删除相册删除其中的图像,我希望它们保留在某种收件箱中,但是如果您想清除没有 ablum 的图像,则可以这样做:

DELETE FROM BD_Image 
  LEFT JOIN BD_AlbumImage ON BD_Image.ImageID = BD_AlbumImage.ImageID 
      WHERE BD_AlbumImage.AlbumID IS NULL
于 2012-10-20T03:39:29.043 回答
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
于 2012-10-20T03:55:12.483 回答
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))

或者

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)
于 2012-10-20T03:00:33.000 回答
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
于 2012-10-20T03:01:51.627 回答
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;
于 2012-10-20T03:11:16.300 回答