0

ディレクトリの機能としてアルバムと画像ギャラリーを作成しています。基本的に、企業はアルバムを作成し、それらのアルバムに画像を追加できます。

これが私のテーブルです:

  • BD_Album(AlbumID、OwnerID、AlbumName)
  • 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

試す

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サーバーの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 に答える
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を実行する必要はありません。次に、次のように言います。ええ、そうかもしれません。私の場合、アルバムを削除するとその中の画像が削除されます。画像は何らかの受信トレイに残しておくことをお勧めしますが、異常のない画像をクリーンアップしたい場合は、次のように行うことができます。

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 に答える