2009-10-18 9 views
3

J'ai une base de données de vente d'occasion et quatre tables avec des relations. Les noms de colonnes identiques ont des relations.Comment supprimer plusieurs lignes dans SQL Server

Les tables sont:
Record: RECID nommarque Modèle ...
Features: FeatureID featurename
Marks: markid nommarque
Carfeature: CarfeatureID RECID FeatureID

Maintenant, je veux supprimer une marque de marques en C#. Lorsque je supprime une marque, SQL doit supprimer tous les enregistrements qui ont cette marque.

J'ai utilisé une requête comme ça:

DELETE from Carfeature 
where RecID = (select RecID 
from Record 
where Mark = (select markname 
       from Marks 
       where [email protected]))"; 


    string sorgudelmarkfromrecord = "DELETE from Record where Mark= 
(select Markname from Marks where [email protected])"; 

    string sorgudelmark = "DELETE from Marks where [email protected]"; 

Quand je lance cela, je reçois un message d'erreur comme ceci:

Subquery retourné plus de 1 valeur.

Ceci n'est pas autorisé lorsque le subquery suit =, !=, <, <= , >, >= ou lorsque le subquery est utilisé comme expression.

La déclaration a été terminée. Alors, comment puis-je supprimer plusieurs données d'une table?

Répondre

11

Si je vous comprends bien, vous pouvez utiliser cette requête pour supprimer tous les CarFeatures pour un markid de Cerain:

DELETE FROM CarFeature 
WHERE RecID IN (
    select RecID 
    from Record 
    where Markname IN (
     select Markname 
     from Marks 
     where MarkID = @MarkID 
    ) 
) 

La suppression des enregistrements et des marques est une version simplifiée de cette requête, je vais laisser la SQL exact à vous.

+0

+1 pour passer plus de temps pour formater votre réponse clairement que je l'ai fait. :) – Moose

+0

Merci à vous deux amis. J'ai essayé et ça a marché. Je sais que c'est très simple mais je suis un programmeur débutant. Je devrais travailler plus dur sur les requêtes SQL :) Merci encore –

2

au lieu d'utiliser where RecID=(...) utilisation where RecID in (...)

1

ON CASCADE SUPPRIMER sur la clé étrangère?

1

utilisent ce

DELETE from Record r 
where r.Mark in 
    (select m.Mark from Marks where r.MarkID=m.MarkID); 

Note: markid doit être la clé primaire dans les deux tables ..

Questions connexes