2017-01-25 1 views
0

J'ai besoin de créer une procédure stockée dans mysql pour supprimer plusieurs enregistrements d'une table en fournissant la liste des ID comme une liste séparée par des virgules.MySql supprimer plusieurs enregistrements par liste séparée par des virgules

exemple

(s'il vous plaît noter que la colonne Id dans le tableau est un entier)

DELIMITER $$ 
CREATE DEFINER=`root`@`%` PROCEDURE `deleteLines`(IN $ids varchar(1000)) 
BEGIN 
    select * from line where $ids in ($ids); 
END$$ 
DELIMITER; 

CALL deleteLines('1,3,5,12'); 

Quelle est la meilleure façon de supprimer plusieurs enregistrements dans ce scénario?

+0

Création d'un sproc est une partie spécifique du brief? – Strawberry

+0

Pourquoi avez-vous besoin d'une procédure pour une tâche aussi simple? http://stackoverflow.com/questions/2615566/delete-where-id-in-list –

+0

Cette procédure stockée appellera par une application. Plutôt que d'appeler l'instruction SQL inline de l'application, je l'ai déplacée vers une procédure stockée. Plus tard si besoin d'une modification, il sera facile de faire n'importe quoi sans compiler l'application. –

Répondre

1

Si vous devez le faire, utilisez find_in_set():

select * from line where find_in_set(id, in_ids); 

En fait, la définition devrait ressembler à ceci si vous voulez supprimer les enregistrements:

DELIMITER $$ 
CREATE PROCEDURE `deleteLines`(
    IN in_ids varchar(1000) 
) 
BEGIN 
    delete from line 
    where find_in_set(id, in_ids); 
END$$ 
DELIMITER; 
+0

Merci, C'est exactement ce que je voulais. –