Bonjour,
je soliccite votre aide pour une requête qui me pose problème :
P.S. :
- (je travaille avec du C# et Sql Serveur 2005, pour le code ci dessous je simplifie pas mal)
- COALESCE sert à remplacer les null par des 0
je voudrais éviter de faire deux requêtes (avec transaction serializable) :
1) récupérer le dernier id de ma table +1
2) insérer mon enregistrement avec l'id que j'ai récupérer
Code : Sélectionner tout - Visualiser dans une fenêtre à part nouvelID = "SELECT (COALESCE(MAX(maTable_id),0)+1) FROM maTable;"en une seule :
Code : Sélectionner tout - Visualiser dans une fenêtre à part INSERT INTO maTable (maTable_id, maTable_lib) VALUES (nouvelID, 'du texte');
1) insérer mon enregistrement avec mon nouvel Id en même temps :
Mais je n'y arrive pas..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INSERT INTO maTable (maTable_id, maTable_lib) VALUES ((SELECT (COALESCE(MAX(maTable_id),0)+1) FROM maTable), 'du texte');
Sql Server me dit que je ne peux pas faire de sous requête dans ce contexte et que seules les expressions scalaires sont permises.
Alors j'ai essayé de mettre seulement COALESCE(MAX(maTable_id)) mais là il me dit que les noms de colonnes ne sont pas autorisées dans ce contexte..
Donc j'ai l'impression que ce n'est pas possible d'insérer un nouvel enregistrement en sélectionnant le (max des ID +1) dans la même requête..
Est ce que je ne peux vraiment pas le faire par aucun moyen et est ce que je suis vraiment obligé de faire deux requêtes pour insérer mes données ?
si oui je trouve ça domage mais s'il le faut il le faut..
d'avance merci beaucoup.
Partager