2010-10-13 4 views
0

Donc, je suis vraiment confus sur la façon d'écrire ce proc. Voici ce qu'il faut faire.Procédure stockée qui supprime les enregistrements en faisant défiler les ID

J'ai 3 tables disposées comme suit:

tblObject {ObjectId, MASTERID}

tblAnotherObject {ObjectId}

tblFurtherObject {ObjectId}

je besoin d'un proc qui peut supprimer les lignes de 'tblAnotherObject' et 'tblFurtherObject' qui contiennent un 'ObjectId' qui n'a pas de 'ObjectId' correspondant dans 'tblObject' qui est associé à un 'MasterId' passé dans proc.

Je me suis cogné la tête contre un mur pendant des heures aujourd'hui, et je n'ai aucune idée de la façon d'écrire quelque chose comme ça ... merci beaucoup d'avance.

+0

cette partie "qui est associée à un 'MasterId' passé à la proc" n'est pas claire. Pourriez-vous élaborer un peu sur cette partie? – InSane

+0

S'il vous plaît poster le code que vous avez écrit jusqu'à présent. Les gens n'aiment généralement pas écrire votre code pour vous. –

+0

@InSane - Say tblObject contient une ligne qui a MasterId = 4 et ObjectId = 15. Je veux supprimer toutes les lignes dans les deux autres tables qui ont ObjectId = 15. Cependant, si tblObject a MasterId = 5 et ObjectId = 15, et Je passe dans @MasterId = 4, et il n'y a aucun enregistrement qui a MasterId = 4 et ObjectId = 15, ces lignes n'ont pas besoin d'être supprimées. – Scott

Répondre

2

je besoin d'un proc qui peut supprimer les lignes dans « tblAnotherObject » et « tblFurtherObject » qui contiennent un « ObjectId » qui n'a pas de correspondance « ObjectId » dans « tblObject » qui est jumelé avec un passé dans ' MasterId 'à la proc.

Utilisation:

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) 

Say tblObject contient une ligne qui a MASTERID = 4 et ObjectId = 15. Je veux supprimer toutes les lignes dans les deux autres tables qui ont ObjectId = 15.

C'est le contraire - l'utilisation:

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)