2010-01-25 12 views
4

Je dois supprimer une ligne en fonction de la valeur d'une colonne lors de l'exécution d'une requête de mise à jour. Voici le code:Comment utiliser les instructions conditionnelles SQL

UPDATE tag SET tag_count = tag_count - 1 WHERE tag_id = 1 
IF tag_count < 1 
delete from tag where tag_id = 1 

Cette requête me donne une erreur.

EDIT J'utilise sql en ligne avec C# et SQL Server

Répondre

6

En général, la meilleure option dans ces cas est d'envelopper le UPDATE et DELETE dans une transaction:

BEGIN TRANSACTION; 

UPDATE tag SET tag_count = tag_count - 1 WHERE tag_id = 1 
DELETE from tag where tag_id = 1 and tag_count < 1; 

COMMIT TRANSACTION; 
+1

Bonne réponse, il est toujours préférable d'éviter une approche procédurale lorsqu'une approche déclarative est disponible. Utilisez les conditionnelles et autres structures de flux de contrôle uniquement en dernier recours dans une procédure stockée. – JohnFx

+0

cela fonctionnera-t-il avec inline sql? – Luke101

+0

@ Luke101: Oui, ça va marcher. Puisque vous utilisez C#, vous pouvez vouloir vérifier ce court exemple qui utilise une transaction similaire à la vôtre: http://www.aspnettutorials.com/tutorials/database/sql-transaction-csharp.aspx –

0

Hmm, as-tu essayé d'utiliser Begin et End?

UPDATE tag 
SET tag_count = tag_count - 1 
WHERE tag_id = 1 

IF tag_count < 1 
    BEGIN 
     DELETE FROM tag 
     WHERE tag_id = 1 
    END 
+0

Dans ce cas, vous devez toujours sélectionner SELECT_count FROM tag WHERE tag_id = 1' avant l'instruction de condition. Cependant, cela n'est pas nécessaire car vous pouvez facilement spécifier la condition dans l'instruction 'DELETE'. –

+0

SQL Server ne reconnaît pas "tag_count" dans le conditionnel IF comme une colonne valide lorsque j'ai essayé ce code. – Luke101