Bonjour à tous,

voilà je vous explique mon problème.

J'ai crée une procédure stockée dans le but de faire du SQL dynamique et plus précisemment des Insert "dynamiques". Elle se présente de la manière suivante :

Procédure stockée

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
DROP PROCEDURE IF EXISTS `sqlDynInsert`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sqlDynInsert`(IN asTable VARCHAR(50), IN asColonne VARCHAR(50), IN asValeur VARCHAR(100))
BEGIN
DECLARE cmd VARCHAR(255);
SET @lsSql = CONCAT('INSERT INTO ',asTable,'(',asColonne,') VALUES ("',asValeur,'")');
PREPARE cmd FROM @lsSql;
EXECUTE cmd;
DEALLOCATE PREPARE cmd;
END
$$
Elle fonctionne très bien mais uniquement lorsque je lui passe un seul élément dans les paramètres. Je m'explique.

Cas de figure qui fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
CALL sqlDynInsert('dossiers', 'prenom', 'nicolas')
Cas de figure qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
CALL sqlDynInsert('dossiers', 'titre,prenom', "'M','Nicolas'")
Le problème vient apparemment des valeurs passées. J'ai essayé dans tous les sens, avec des "\", des simples / doubles quotes.... Mais je ne m'en sors pas. Il semble m'interprêter mes deux éléments comme un seul et unique élément qui contiendrait des quotes.

J'ai un retour m'indiquant "Column count doesn't match value count"

Selon vous, comment puis je faire pour pouvoir passer autant d'éléments que je le souhaite dans ce cas de figure.

Par avance grand merci de votre aide.