IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Procedure Stockée à double fonction


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut Procedure Stockée à double fonction
    Bonjour à tous,

    J'ai actuellement 2 tables sous SQL Server 2000:
    TableA
    TableB
    Et une procedure stockée, qui quand elle est executé, avec un certain nombre de parametres, fait un total des enregistrement de la table A correspondant au parametres et les insere dans la tableB.

    Ce que je souhaiterais faire, c'est que cette procedure, quand on l'execute, verifie si il existe deja un enregistrement dans tableB correspondant à ses parametres, et si oui qu'elle mette à jour cette enregistrement, isnon qu'elle le créé.

    Je ne vois pa strop comment m'y prendre.
    Voici le code actuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    @param1 int, @param2 int, 
    @param3 int, @param4 int,
    @param5 int OUTPUT
     
    	AS
     
    INSERT INTO TableB 
    	SELECT paquet , 
    		 SUM(Case When Prop1 = 1 And Prop2 = 0 then 1 else 0 end) as Total1,
    		 SUM(Case When Prop1 = 1 And Prop2 = 1 then 1 else 0 end) as Total2,
    		 SUM(Case When Prop2 = 0 then 1 else 0 end) as Total3,
    		 SUM(Case When Prop2 = 1 then 1 else 0 end) as Total4,
    		 [date], Prop5, Prop6, Prop7, Prop8
    	FROM Table1 
    	WHERE date = cast(floor(cast(getdate() as float)) as datetime)
    		AND Prop5 = @param1 AND Prop6 = @param2
    		AND Prop7 = @param3 AND Prop8 = @param4
    	GROUP BY paquet, date, Prop7, Prop5, Prop6, Prop8;
     
    	SET @param5 =	(SELECT COUNT(*)
    			FROM Table2 
    			WHERE date = cast(floor(cast(getdate() as float)) as datetime)
    				AND Prop5 = @param1 AND Prop6 =@param2
    				AND Prop7 = @param3 AND Prop8 = @param4);
    GO
    En l'etat la procedure ne fait qu'inserer, et si l'enregistrement existe deja, me renvoi une violation de clef.

    Si quelqu'un peut m'eclairer.
    Les meilleures sauces de salade sont sur www.sauce-salade.com
    SpBreak la pause SharePoint: SP Break

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Points : 556
    Points
    556
    Par défaut
    Citation Envoyé par jubourbon Voir le message
    Bonjour à tous,


    En l'etat la procedure ne fait qu'inserer, et si l'enregistrement existe deja, me renvoi une violation de clef.

    Si quelqu'un peut m'eclairer.
    1. tu peux effacer les anciens enregistrements et et ensuite faire un Insert
    (Delete puis Insert)

    2. Sinon il faut faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Insert TableB
    SELECT (tous les champs)
    FROM TableA ta
    LEFT JOIN TableB tb ON ta.ID = tb.ID
    WHERE tb.ID IS NULL
    Et pour l'Update
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE tb
    SET ...(tous les champs)
    FROM TableB tb
    INNER JOIN TableA ta ON ta.ID = tb.ID

  3. #3
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut
    Ok, Merci, mais est ce que je peux dans ma procedure stockée faire un truc du genre:

    If exist (select * from tableA where.....)
    Update....

    Else

    Insert Into....
    Les meilleures sauces de salade sont sur www.sauce-salade.com
    SpBreak la pause SharePoint: SP Break

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mars 2007
    Messages : 616
    Points : 556
    Points
    556
    Par défaut
    Citation Envoyé par jubourbon Voir le message
    Ok, Merci, mais est ce que je peux dans ma procedure stockée faire un truc du genre:

    If exist (select * from tableA where.....)
    Update....

    Else

    Insert Into....
    Théoriquement oui tu peux, mais à condition de mettre ça dans un curseur et pour chaque ligne tu dois faire ce test puis faire l'update ou l'insert ligne par ligne. Ce genre de choses est VACHEMENT lent.

    A oublier donc.

  5. #5
    Membre habitué Avatar de jubourbon
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 540
    Points : 189
    Points
    189
    Par défaut
    Ok, merci des conseils.
    Les meilleures sauces de salade sont sur www.sauce-salade.com
    SpBreak la pause SharePoint: SP Break

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/03/2014, 18h02
  2. Réponses: 4
    Dernier message: 05/03/2009, 13h52
  3. Best practice : Procedure stockée ou Fonction
    Par rvaouate dans le forum Développement
    Réponses: 5
    Dernier message: 10/09/2008, 18h38
  4. Difference procedure stocké et fonction ?
    Par MaxiMax dans le forum Langage SQL
    Réponses: 5
    Dernier message: 10/08/2005, 13h13
  5. procedure stockée et fonction "split"
    Par wehtam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2005, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo