通过循环Id来删除记录的存储过程

时间:2010-10-13 03:14:53

标签: sql sql-server tsql

所以我真的很困惑如何写这个proc。这是需要做的事情。

我有3张表格如下:

tblObject {ObjectId,MasterId}

tblAnotherObject {ObjectId}

tblFurtherObject {ObjectId}

我需要一个可以删除'tblAnotherObject'和'tblFurtherObject'中包含'ObjectId'的行的proc,'ObjectId'在'tblObject'中没有匹配的'ObjectId',它与传入的'MasterId'配对过程。

今天我一直在墙上撞墙几个小时,我不知道如何写这样的东西......非常感谢你提前。

1 个答案:

答案 0 :(得分:2)

  

我需要一个可以删除'tblAnotherObject'和'tblFurtherObject'中包含'ObjectId'的行的proc,'ObjectId'在'tblObject'中没有匹配的'ObjectId',它与传入的'MasterId'配对过程。

使用:

DELETE FROM TBLANOTHEROBJECT
 WHERE NOT EXISTS(SELECT NULL
                    FROM TBLOBJECT o
                   WHERE o.masterid = @masterid
                     AND o.objectid = TBLANOTHEROBJECT.objectid)

DELETE FROM TBLFURTHEROBJECT
 WHERE NOT EXISTS(SELECT NULL
                    FROM TBLOBJECT o
                   WHERE o.masterid = @masterid
                     AND o.objectid = TBLFURTHEROBJECT.objectid)

  

假设tblObject包含一个MasterId = 4且ObjectId = 15的行。我想删除其他两个表中ObjectId = 15的所有行。

相反 - 使用:

DELETE FROM TBLANOTHEROBJECT
 WHERE EXISTS(SELECT NULL
                FROM TBLOBJECT o
               WHERE o.masterid = @masterid
                 AND o.objectid = TBLANOTHEROBJECT.objectid)

DELETE FROM TBLFURTHEROBJECT
 WHERE EXISTS(SELECT NULL
                FROM TBLOBJECT o
               WHERE o.masterid = @masterid
                 AND o.objectid = TBLFURTHEROBJECT.objectid)
相关问题