insert avec conditions [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 31-10-2006 à 11:40:55
bien sur Par exemple :
WHERE nom NOT IN (SELECT nom FROM personne)
Marsh Posté le 31-10-2006 à 12:06:55
merci pour ta réponse
en faite je suis confronté à un autre problème... l'insertion multiple avec MSQSL 6.5
J'ai essayé ça :
INSERT INTO personne (nom, age) |
Mais il n'aime pas le "," intermédiaire. J'ai donc essayé ça :
INSERT INTO personne (nom, age) |
Mais il n'aime pas le second "VALUES". J'ai trouvé une asstuce sur le net :
INSERT INTO personne (nom, age) |
Mais il n'aime pas ça non plus.
Comment fait-on une insertion multiple sans effectuer autant de requête insert qu'il y à de valeurs à insérer
Marsh Posté le 31-10-2006 à 12:35:14
tu fais un insert "normal", et t'auras plus de problème
arrêtez de toujours vouloir utiliser des trucs que seul mysql supporte
sinon, faire proprement, et faire un trigger "before insert", qui fait un update quand la ligne existe déjà.
Marsh Posté le 31-10-2006 à 12:37:46
Genre, si au lieu d'insérer
"Patrick Dupond", 18
Tu insères
"Patrick Dupond", 19 (bein ouais, au bout d'un an, il a un an de plus )
Avec le where proposé par chapi, ça mettra rien à jour.
avec un trigger, si.
ps: qu'est-ce que tu fous avec MS SQL Server 6.5 ? Tu sais quand même qu'il date de 1994 ?
Déjà le 7.0 c'est vraiment déterrer les morts, mais alors le 6.5... déjà en 1999 quand j'ai commencé à bosser, il n'était plus utilisé
Marsh Posté le 31-10-2006 à 14:16:34
Pour ce qui est d'utiliser la version 6.5 de MS SQL, je n'y peux rien, c'est imposé...
Retirer le INTO ne change rien, je n'arrive pas à faire une insertion multiple en une commande. Je suis obligé de faire :
INSERT personne (nom, age) VALUES ('Toto', 18) |
En ce qui concerne le besoin de ne pas insérer de doublon, finalement j'utilise nom comme clé et l'insertion d'un doublon est refusée automatiquement.
Sinon, merci pour l'astuce du trigger. Ca ne va pas me servir dans ce cas concret mais c'est bon à savoir (je ne suis pas un pro en SQL...).
PS : pour mon exemple j'ai simplifié la structure et le nom des champs. Dans mon cas, l'"age" n'ai pas amené à évoluer...
Marsh Posté le 31-10-2006 à 14:23:49
je t'ai dit d'utiliser u insert normal, pas d'enlever le into
nan, tu fais :
Code :
|
Marsh Posté le 31-10-2006 à 14:25:41
sinon, juste par curiosité, qui vous impose la 6.5 ? son père s'appelle Frankenshtein ? Il est fabriqué avec des bouts d'humains décomposés retrouvé au fond d'un puit ?
Marsh Posté le 31-10-2006 à 14:43:54
donc d'après toi il n'y à pas moyen de faire une insertion multiple avec une seul requète sous MS SQL 6.5 ?
MS SQL 6.5 c'est par ce que c'est un système qui tourne depuis la nuit des temps et qui n'a jamais eu besoin dévoluer (jusqu'à présent...)
PS : avec ou sans INTO ça à l'air de marcher pareil
Marsh Posté le 31-10-2006 à 14:47:37
1/ oui
2/ boarf, format c: pis ça va résoudre le problème de version de SQL Server
3/ ouais, mais si je te dis de pas faire des trucs de MySQL comme un goret, c'est pas pour faire des trucs de MSSQL comme un goret ensuite
Marsh Posté le 31-10-2006 à 14:57:29
1) bon tant pis
2) ça ne tiens pas à moi...
3) lol, ok je laisse le INTO
merci pour ton aide
Marsh Posté le 05-10-2007 à 10:38:31
Réexplique de A à Z le problème alors.
Parceque j'ai beau relire le topic, je ne vois pas comment ZeBorG a pu avoir un problème.
D'autant qu'on a abordé pas mal de points...
1/ Trigger sur l'insertion pour prendre des décisions sur les doublons
2/ Inserrer UNE SEULE PUTAIN DE LIGNE A LA FOIS, stop aux merdes proprio de MySQL
Marsh Posté le 05-10-2007 à 11:14:58
Surtout que si le code est bien ecrit, c'est plus facile et plus propre de generer X insert simple, que de generer un gros insert baveux.
Marsh Posté le 05-10-2007 à 11:19:17
vainsang, tu en es où par rapport à ton problème de départ stp ?
Marsh Posté le 05-10-2007 à 11:46:54
Si tes données proviennent d'une autre table (temporaire peut-être) tu peux faire un simple :
insert into personne (nom, age)
select n.nom, n.age
from new_data n left outer join personne u on n.nom = u.nom
where u.nom is null;
Marsh Posté le 31-10-2006 à 10:46:44
Salut,
Comment fait-on une insertion avec une condition dans MS SQL?
Exemple :
J'ai la table suivante :
personne (nom, age )
"Jaque Dubois", 20
"Patrick Dupond", 18
"Pierre Leclerc", 16
"Olivier Dupuis", 19
Et je souhaite ajouter les valeurs suivantes :
"Patrick Dupond", 18
"Julie Durand", 19
"Stéphanie Conti", 21
Pour obtenir le résultat suivant :
"Jaque Dubois", 20
"Patrick Dupond", 18
"Pierre Leclerc", 16
"Olivier Dupuis", 19
"Julie Durand", 19
"Stéphanie Conti", 21
Pour l'instant j'ai :
INSERT INTO personne(nom,age)
VALUES ('Patrick Dupond', 18), ('Julie Durand', 19), ('Stéphanie Conti', 21);
Mais "Patrick Dupond" existe déjà dans la table personne. Je ne veux pas l'ajouter en double. Est-ce que cela se formule sous la forme d'une condition WHERE dans le INSERT ?
Merci