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 :

Procédure stockée


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut Procédure stockée
    Bonjour a tous ;
    J’ai deux tables Ligne_facture (Num_fact, code_produit, Date_mvt, PU), Produit (Code_produit, Date, PU) ;
    Dans la deuxième table en fait enregistrée les PU des produits en fonction de leurs dates c'est-à-dire en peut y avoir le même produit dont les PU différent dans plusieurs dates, l’idée c’est quand je tape une date dans la table Ligne_facture, je parcoure la table produit et je récupère le PU qui a été saisie dans cette date ou inférieure, alors je voulais créer une procédure stockée qui me permettre a le faire merci beaucoup a tous.
    Cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Essayez :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    CREATE PROCEDURE usp_Get_PU_byDate
    	@code_produit INT,
    	@Num_fact INT
    AS
    BEGIN
    	-- vérification de la validité des données
    	IF @code_produit IS NULL OR @code_produit = 0
    	BEGIN
    		RAISERROR('Le code produit saisi est invalide !', 16, 1)
    	END
     
    	IF @Num_fact IS NULL OR @Num_fact = 0
    	BEGIN
    		RAISERROR('La date saisie est invalide !', 16, 1)
    	END
     
    	-- Recherche du dernier prix unitaire appliqué à cette date pour ce produit
    	DECLARE @date_mvt DATETIME
    	SELECT @date_mvt = Date_mvt
    	FROM dbo.Ligne_facture
    	WHERE Num_fact = @Num_fact
    	AND code_produit = @code_produit
     
    	WITH
    		CTE_LAST_PU AS
    		(
    			SELECT @code_produit AS code_produit,
    					MAX(Date) AS dateMax
    			FROM dbo.Produit
    			WHERE Code_produit = @code_produit
    			AND Date <= @date_mvt
    		)
    	SELECT P.code_produit,
    			P.PU,
    			C.dateMax
    	FROM dbo.Produit AS P
    	JOIN CTE_LAST_PU AS C
    		ON P.code_produit = C.code_produit
    		AND P.Date = C.dateMax
    END
    Valable sous SQL Server 2005 et 2008.

    @++

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut
    Merci elsuket de votre réponse, j'ai bien suivi votre procédure mais un message d'erreur apparaitra le voila


    ca vaut dire quoi ce msg d'erreur
    Merci elsuket

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Cette procédure stockée prend en entrée deux paramètres : le code produit et le numéro de la facture.
    Comme votre table s'appelle Ligne_Facture, j'ai supposé qu'il a au moins un produit pour toute facture, mais aussi qu'il peut y en avoir plusieurs, donc il faut déterminer pour quel produit de la facture vous recherchez le PU à ce moment là

    @++

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut
    Salut elsuket, dans le masque de saisie (j'utilise Delphi7) je sélectionne le code produit et je tape la date et je récupère que le PU qui a été saisie dans cette date, je n'utilise pas comme entré le num_facture car cette dernière est conçue sur la base d'une concaténation de plusieurs données, alors j'exécute la procédure quand je sort du champ ou j'ai saisie la date et comme vous l'avait dit une facture peut y avoir qu'un seul produit,
    excuser moi elsuket car je suis vraiment perturbé et je suis débutant dans ce magnifique SGBDR vous voyez le passage (ACCESS VERS SQL SERVER c'est vraiment dure )

  6. #6
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Citation Envoyé par ghilo Voir le message
    je n'utilise pas comme entré le num_facture car cette dernière est conçue sur la base d'une concaténation de plusieurs données
    Bonjour,

    Un champ d'une base de données relationnel ne doit-il pas être atomique ?

    Cordialement,

    Arkhena

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut
    Citation Envoyé par Arkhena Voir le message
    Bonjour,

    Un champ d'une base de données relationnel ne doit-il pas être atomique ?

    Cordialement,

    Arkhena
    salut Arkhena je n'est pas compris ce que vous vient de dire
    cordialement,

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ne combinez pas plusieurs informations dans une même colonne !

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Ne combinez pas plusieurs informations dans une même colonne !
    et pourquoi pas le NUM_FACTURE a sa propre codification de TYPE Année+moi+code_produit+Numéro séquentiel et tous cela dans une même colonne
    bien a vous

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 990
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 990
    Billets dans le blog
    6
    Par défaut
    J’ai deux tables Ligne_facture (Num_fact, code_produit, Date_mvt, PU), Produit (Code_produit, Date, PU) ;
    Votre modèle est faux puisque vous avez comme clef de la table produit la code produit. Vous ne pourrez donc jamais avoir le même produit avec deux prix différents en fonction de la date. Commencez par modéliser proprement votre base et tout ira mieux !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Votre modèle est faux puisque vous avez comme clef de la table produit la code produit. Vous ne pourrez donc jamais avoir le même produit avec deux prix différents en fonction de la date. Commencez par modéliser proprement votre base et tout ira mieux !

    A +
    Bonjour SQLPro
    c'est qu'une erreur de frape j'ai comme clé le code produit et la date en même temps,


    vous pouvais m'aider ce que je doit faire comme paramètres d'entrée dans la procédure stockée ? et surtout m'éclaircir un peut le travaille que je doit faire !!? merci beaucoup SQLPro

    @+

  12. #12
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 990
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 990
    Billets dans le blog
    6
    Par défaut
    OK, erreur rectifiée.

    Dans ce cas, vous avez une nouvelle erreur de modélisation, car pour faire référence à votre produit dans votyre table des commandes il faut tous les attributs de la clef de la table Produit en tant que clef étrangère de la table des commandes.

    Votre modèle devrait donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE Produit
    (Code_produit  INT NOT NULL, 
     Date_produit  DATE NOT NULL, 
     PU            DECIMAL(16,2)
     CONSTRAINT PK_PRD PRIMARY KEY (Code_produit, Date_produit));
     
     CREATE TABLE Ligne_facture 
    (Num_fact      INT NOT NULL PRIMARY KEY,
     Code_produit  INT,
     Date_produit  DATE,
     Date_mvt      DATE, 
     PU            DECIMAL(16,2),
     CONSTRAINT FK_PRD FOREIGN KEY (Code_produit, Date_produit)
                       REFERENCES Produit (code_produit, Date_produit));
    A partir de là les chiosent deviennent simple : il suffit d'implémenter une vue des produit avec les colonnes suivantes :
    • Code_produit,
    • Date_debut_produit,
    • Date_fin_produit,
    • PU.

    Désormais vos requêtes vont devenir triviales et pas besoin d'une couteuses procédure.

    A +
    PU
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut
    Merci SQLPro pour votre réponse, mais pourquoi vous ajouter la date_produit dans la table ligne_facture dans ce cas quelle sera l'utilité de la Date_mvt !
    avec cette dernière j'allais récupérer le PU dans la table produit ou le la date du produit est correspond a la date_mvt saisie, merci SQLPro
    @+

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut
    Bonjour à tous ;

    Finalement j'ai réussi et j'ai pu trouver le PU de la table produit a la table ligne facture pas l'aide d'une procédure stockée mais a l'aide d'une requette SQL propre a delphi7, Je sait que ce forum ne traite pas le delphi7 mais excuser moi de vous met le code source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Adoquery1.SQL.Clear;
    Adoquery1.SQL.Add('select Top 1 a.pu from produit a ,Ligne_facture b');
    Adoquery1.SQL.Add('where (a.code_produit=:x)');
    Adoquery1.SQL.Add('AND(a.Date<=:d)');
    Adoquery1.SQL.Add('order by a.Date DESC');
    Adoquery1.Parameters[0].DataType:=ftWideString;
    Adoquery1.Parameters[0].Value:=DblookupcomboBox2.Text;
    Adoquery1.Parameters[1].DataType:=ftDateTime;
    Adoquery1.Parameters[1].Value:=DBedit3.Text;
    Adoquery1.Active:=True;
    Ligne_facture.Value:=Adoquery1.FieldValues['PU'];
    Merci a tous

    mais je suis toujours a la recherche de la procédure stockée qui me permet a trouver le même résultat merci et encore merci

  15. #15
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Dommage de ne pas avoir profité de tous les avantages d'une procédure stockée

    @++

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2009
    Messages : 65
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Dommage de ne pas avoir profité de tous les avantages d'une procédure stockée

    @++
    Bonjour elsuket;
    effectivement c'est bien dommage moi je suis tout nouveau dans SQL SERVER et je veut vraiment bien l'apprendre car ca ma facilite la tache vraiment, et j'évite de coder sur delphi mais pour le moment je sait comment faire des ptit insertion a l'aide des procédures stockée et même de créer des vues mais le plus important c'est comment faire des procédures stockée avec des conditions genre imbriquée et complexe , mais c'est vraiment un bon début pour moi , et je suis content d'être un membre dans ce magnifique forum dans le quelle j'ai vraiment trouver de l'aide et je sait que je vais évoluer car tan qu'il existe des membre comme elsuket et SQLPro et les tous autres je ne serais plus perdue
    Merci et bien a vous @+

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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