Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1915 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] insert avec conditions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] insert avec conditions

n°1468012
ZeBorG
Yes we can!
Posté le 31-10-2006 à 10:46:44  profilanswer
 

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 :)

mood
Publicité
Posté le 31-10-2006 à 10:46:44  profilanswer
 

n°1468079
chapi
Downgradé
Posté le 31-10-2006 à 11:40:55  profilanswer
 

bien sur :) Par exemple :
 
WHERE nom NOT IN (SELECT nom FROM personne)


---------------
I drive at 88mph ! Just in case...
n°1468108
ZeBorG
Yes we can!
Posté le 31-10-2006 à 12:06:55  profilanswer
 

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)
VALUES ('Toto', 18), ('Titi', 20), ('Tata', 16)


Mais il n'aime pas le "," intermédiaire. J'ai donc essayé ça :

INSERT INTO personne (nom, age)
VALUES ('Toto', 18)
VALUES ('Titi', 20)
VALUES ('Tata', 16)


Mais il n'aime pas le second "VALUES". J'ai trouvé une asstuce sur le net :

INSERT INTO personne (nom, age)
SELECT 'Toto', 18
UNION ALL
SELECT 'Titi', 20
UNION ALL
SELECT 'Tata', 16


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  :??:

n°1468132
MagicBuzz
Posté le 31-10-2006 à 12:35:14  profilanswer
 

tu fais un insert "normal", et t'auras plus de problème :o
 
arrêtez de toujours vouloir utiliser des trucs que seul mysql supporte :o
 
sinon, faire proprement, et faire un trigger "before insert", qui fait un update quand la ligne existe déjà.


Message édité par MagicBuzz le 31-10-2006 à 12:35:48
n°1468133
MagicBuzz
Posté le 31-10-2006 à 12:37:46  profilanswer
 

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 :D)
 
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 ? :o
 
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é :D

n°1468178
ZeBorG
Yes we can!
Posté le 31-10-2006 à 14:16:34  profilanswer
 

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)  
INSERT personne (nom, age) VALUES ('Titi', 20)  
INSERT personne (nom, age) VALUES ('Tata', 16)
...


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... ;)

n°1468185
MagicBuzz
Posté le 31-10-2006 à 14:23:49  profilanswer
 

je t'ai dit d'utiliser u insert normal, pas d'enlever le into :o
 
nan, tu fais :
 

Code :
  1. insert into tambouille (truc, muche) values ('machin1', 'chose1')
  2. go
  3. insert into tambouille (truc, muche) values ('machin2', 'chose2')
  4. go

n°1468186
MagicBuzz
Posté le 31-10-2006 à 14:25:41  profilanswer
 

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 ? :o

n°1468199
ZeBorG
Yes we can!
Posté le 31-10-2006 à 14:43:54  profilanswer
 

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  :pt1cable:

n°1468205
MagicBuzz
Posté le 31-10-2006 à 14:47:37  profilanswer
 

1/ oui
2/ boarf, format c: pis ça va résoudre le problème de version de SQL Server :ange:
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 ;)


Message édité par MagicBuzz le 31-10-2006 à 14:47:48
mood
Publicité
Posté le 31-10-2006 à 14:47:37  profilanswer
 

n°1468219
ZeBorG
Yes we can!
Posté le 31-10-2006 à 14:57:29  profilanswer
 

1) bon tant pis
2) ça ne tiens pas à moi...
3) lol, ok je laisse le INTO
 
merci pour ton aide :)
 
 :hello:

n°1619398
vainsang
Posté le 05-10-2007 à 09:10:36  profilanswer
 

Bonjour,
 
J'ai un problème similaire à celui cité ci-

n°1619474
MagicBuzz
Posté le 05-10-2007 à 10:38:31  profilanswer
 

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


Message édité par MagicBuzz le 05-10-2007 à 10:41:24
n°1619512
MEI
|DarthPingoo(tm)|
Posté le 05-10-2007 à 11:14:58  profilanswer
 

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.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1619519
jpcheck
Pioupiou
Posté le 05-10-2007 à 11:19:17  profilanswer
 

vainsang, tu en es où par rapport à ton problème de départ stp ?

n°1619562
Taz
bisounours-codeur
Posté le 05-10-2007 à 11:46:54  profilanswer
 

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;


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] insert avec conditions

 

Sujets relatifs
[PHP]Probleme requete insertProbleme Requette SQL
[SQL] noob, script arrêt/marche service SQL[SQL]Plusieurs sémaphores pour une même connexion
Pre-requis pour SQL[RESOLU][SQL] Pb de requete vide
Projet SGBD / Access / SQL => Compatibilité logiciels[BO] Création de conditions prédéfinies personnelles sous WEBI
erreur SQL # 1064: Je n'arrive pas à trouver la solutionQuantum DB, client SQL pour eclipse
Plus de sujets relatifs à : [SQL] insert avec conditions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR