|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
Bonjour,
J'ai cru comprendre que ON DUPLICATE KEY UPDATE etait en fait exclusif a Mysql !?! Je cherche donc un substitue a cette fonction. J'ai vu qu'il y avait avec SQL server 2008 la fonction MERGE mais elle ne correspond pas vraiment a ce que je veux car si j'ai bien compris c'est lorsqu'on a deux tables et que l'on veut en mettre une a jour grace a l'autre !?! Du coup existe-il quelquechose qui me permette de controler si une entree existe deja dans l'UNIQUE table de ma BDD et si oui de ne pas ajouter cet entree ? Merci de votre aide, Mathieu |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
Effectivement MySQL qui est très limité (a lire http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/) implémente tout un tas de truc hors norme pour tenter de palier ses défauts.
la solution est effectivement MERGE (norme SQL) MERGE fonctionne aussi bien avec une table que des valeurs. Exemple : Code :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
20
|
|
|
#3 | ||
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
Je n'ai pas encore totalement compris le fonctionnement de cette commande mais je commence a comprendre certaines choses.
Par contre j'aimerais en faite controler si deux des champs de ma ligne existe ou non dans ma table. Je m'explique : J'ai une table [Variables] avec 8 champs (Name, Description, Type, Min, Max, Feature, Storage, FileName). Cette table possede la cle primaire (Name, FileName). Ce que je voudrais donc c'est a chaque ligne que je veux inserer dans ma table [Variables] ma requete controle si la cle n'existe pas deja (et donc n'ajoute pas la ligne) et si elle n'existe pas, ajoute ma ligne. Donc est-ce que cette requete vous semble correcte ? Code :
Dois-je obligatoirement faire un UPDATE si la ligne existe ? EDIT : Je travaille avec Visual C# 2010 Express Edition (d'ou les @) EDIT bis : Je viens de me rendre compte que je dois verifier la ligne entiere et pas seulement la cle non ? Sinon il y a un probleme lorsque j'ajoute ma ligne a ma table ^^ |
||
|
|
00
|
|
|
#4 | ||
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
Voici ma nouvelle requete :
Code :
|
||
|
|
00
|
|
|
#5 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
MERGE n'est pas fait pour cela. L'intérêt de MERGE est d'avoir la possibilité, en une seule transaction, de réaliser à la fois un INSERT et un UPDATE (ou un DELETE). Dans votre cas, on pourrait avoir : - Si la ligne existe, on la met à jour (UPDATE) - Si elle n'existe pas, on l'ajoute (INSERT). Pour résoudre votre problème, une demi-jointure gauche suffit : Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#6 |
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
En gros je dois creer une table (celle que vous appelez "uneAutreTable") ?
Hum j'ai pas tout saisi en faite. Est-il possible d'expliquer les differentes partie de la requete svp ? |
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Comment sont valuées toutes les variables de votre requête ?
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#8 |
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
Ce sont toutes des Varchar
|
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
ça c'est leur type, par leur valeur
Comment ces variables prennent elles-une valeur ? C'est à dire : comment les affectez-vous ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#10 |
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
^^ desole !
Je vais vous raconter l'histoire depuis le debut alors : J'ai donc des variables (possedant plusieurs attributs). Dans mon programme ces variables sont stockees dans une List<CBase> (que je vais appeler "basic") CBase etant une classe que j'ai cree possedant les attributs Name, Description, ... Donc chaque variable est une CBase et les variables de ma requete sont @Name = basic[indice].Name @Description = basic[indice].Description ... EDIT : Ne me vouvoyez pas please ^^ |
|
|
00
|
|
|
#11 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Pardon : quand je parlais de variable, j'entendais @Name, @Description, @Type, @Min, @Max, @Feature, @Storage, @FileName.
Sont-elles valuées par votre application ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#12 |
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
oui c'est ce que j'ai explique ^^ les valeurs viennent d'une List<CBase> et chaque variable @Name, @Description, ... represente respectivement l'attribut Name de CBase, l'attribut Description de CBase, ...
En gros mes variables sont valuees grace a un tableau de String ^^ Est-ce plus clair ? |
|
|
00
|
|
|
#13 | ||
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
Pour etre plus clair j'ai :
Code :
|
||
|
|
00
|
|
|
#14 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Fiou ! c'est long ! Un appel à une procédure stockée est si simple !
Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
10
|
|
|
#15 | ||||||
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
J'ai donc fait :
Code :
Code :
Ou est-ce qu'il faut que je fasse : Code :
|
||||||
|
|
00
|
|
|
#16 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Une procédure stockée est un object de base de données.
On peut aussi créer des fonctions, des vues, des triggers, ... C'est un groupe d'instructions que l'on peut exécuter en lui passant (ou pas) des paramètres. Donc la procédure stockée que je vous ai donnée doit être créée dans votre base de données à l'aide de SQL Server Management Studio. Une fois cela fait il suffit d'appeler votre procédure stockée dans votre code. Cette page devrait vous y aider. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
10
|
|
|
#17 |
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
Ahah je suis vraiment pas doue ^^
En tout cas merci beaucoup j'ai reussi a faire marcher la commande tout comme vous disiez Je vous parle meme pas de ce a quoi ressemblait ma methode d'ajout d'info a la BDD dans mon programme avant votre intervention ... Vous pleureriez je crois Merci d'avoir pris du temps pour me repondre et pour m'aider ! J'ai decouvert les procedures stockees grace a vous (J'apprend le SQL tout seul ...) et effectivement elles simplifient la vie ! Encore merci, Mathieu |
|
|
00
|
|
|
#18 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
Citation:
Ici je montre l'intérêt de l'utilisation des procédures stockées. Citation:
Citation:
Je suis passé à peu près par le même problème. Je vous conseille de lire le site de SQLPro, qui est très riche. Vous pouvez aussi jeter un oeil aux blogs SQL Server. Vous pouvez également lire les ouvrages d'Itzik Ben-Gan et Sajal Dam. A bientôt ! @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||
|
00
|
|
|
#19 |
|
Membre à l'essai
![]() Mathieu Étudiant Inscription : mai 2011 Messages : 86 ![]() |
Oui c'est le moins qu'on puisse dire a l'ecole on ne nous apprend pas grand chose sur les BDD.
Je comprend maintenant pourquoi ce cours s'appelait "INTRODUCTION aux bases de donnees" en premiere annee mais en deuxieme annee ils auraient mieux fait de l'appeler pareil ^^ Je suis en stage en Angleterre actuellement et je detestait les base de donnees en arrivant mais mon tuteur m'a donne a realiser un logiciel utilisant les BDD Et encore un peu plus grace a toi elsuket ! Sur ce, a bientot pour un de mes futurs problemes |
|
|
00
|
|
|
#20 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Pour ma part j'ai haï le cours de bases de données de première année d'IUT ... bon, il n'y avait pas de TP aussi !
En deuxième année, j'ai demandé à mon professeur s'il y a des formations qui permettent de devenir DBA junior ... et je crois qu'il n'en existe pas dans le monde Quelque part je comprend pourquoi, mais je trouve aussi cela stupide. Citation:
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com