我有三个表,其中一个存储用户的基本信息,另一个是个人资料信息,最后一个是存储用户图片。
当我删除这些用户时,我需要删除这些表中的所有数据。所以我写了这样的查询。
DELETE Kullanicilar FROM Kullanicilar
INNER JOIN ProfilBilgileri ON Kullanicilar.ID = ProfilBilgileri.UyeID
INNER JOIN UyeResim ON Kullanicilar.ID = UyeResim.UyeID
WHERE Kullanicilar.ID=@ID
但它只是删除了“Kullanicilar”表中的数据 有什么建议吗?
编辑:我正在使用MSSQL 2008但托管公司2000所以我需要兼容的代码。答案 0 :(得分:5)
您可以使用Xavinou建议的触发器,或者,如果表中有外键,则可以使用“在Cascade上删除”选项。您的外键将使用以下方式创建:
FOREIGN KEY ([Id]) REFERENCES AnotherTable
ON DELETE CASCADE
答案 1 :(得分:4)
想到的解决方案是使用交易。
BEGIN TRANSACTION
DELETE FROM Kullanicilar WHERE ID = @ID
DELETE FROM ProfilBilgileri WHERE UyeID = @ID
DELETE FROM UyeResim WHERE UyeID = @ID
COMMIT TRANSACTION
答案 2 :(得分:0)
declare @pbid int
declare @urid int
SELECT @pbid = ProfilBilgileri.UyeID, @urid = UyeResim.UyeID FROM Kullanicilar INNER JOIN ProfilBilgileri ON Kullanicilar.ID = ProfilBilgileri.UyeID INNER JOIN UyeResim ON Kullanicilar.ID = UyeResim.UyeID WHERE Kullanicilar.ID=@ID
delete Kullanicilar where ID = @ID
delete ProfilBilgileri where UyeID = @pbid
delete UyeResim where UyeID = @urid
当然,我假设Kullanicilar与其他两张桌子之间存在一对一的对应关系。如果是1对多,则需要为每个其他表提供临时表,并根据该表进行删除。希望这能指出你正确的方向!