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 :

sql serveur 2000


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 28
    Points : 20
    Points
    20
    Par défaut sql serveur 2000
    Bonjour

    Après plusieurs tentative, je vous sollicite à nouveau....

    La base sur laquelle je travaille est une base Microsoft SQL Server 2000 et je souhaite mettre en forme les données à l'aide des procédures stockées.

    Voila, Les différents évenements arrivent "en vrac" dans une table T_eve_SFR. La table T_cumul_eve_SFR permet de cumuler ces évenements par machine,agent, jourprod(date), equipe,type_machine... et d'avoir la "quantité"
    de chaque évenement dans le champs "param".

    Pour l'instant pas de problème.

    Dans la table T_SFR_RTO, l'objectif est de synthétiser tous les évenements sur une seule ligne, par machine, type_machine, agent, jourprod, equipe, produit... Cette table contient donc tous les champs correspondants aux divers évenements qu'ils puissent y avoir.
    Pour chaque évenement la table contient un champ correspondant au nom de l'évenement (à renseigner si il ya une quantité) et un autre correspondant à la quantité de l'évenement. Ces différents éléments sont présents dans la table T_code_eve_SFR.


    D'abord j'ai décidé de remplir la table T_SFR_RTO avec les différentes lignes synthétisées avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    insert into T_SFR_RTO ( JourProd, equipe, agent, poste, Produit, Type_Machine_SFR, Machine) 
    select distinct  JourProd, equipe, agent, poste,Produit,Type_Machine_SFR,Machine 
    from T_Cumul_eve_SFR 
     
    update T_SFR_RTO 
    set Usine = 'VAN', 
     atelier = 'RTO', 
     Satelier = 'RTO2', 
     Pvidage = 'P6'
    Maintenant il "reste" à mettre à jour les champs évenements et quantités...

    Après plusieurs tentatives... de pivots et autres...je me suis orienté vers l'utilisation de curseurs et donc de sql dynamique pour pouvoir balayer la table T_cumul_eve_SFR et passer les paramêtres évenement, jourprod, equipe, agent, machine, type_machine,produit, afin de d'affecter le bon paramêtre à la bonne ligne dans la table T_SFR_RTO.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
     
    DECLARE @eve VARCHAR(10) 
    DECLARE @agent  VARCHAR(10) 
    DECLARE @equipe  VARCHAR(10) 
    DECLARE @machine VARCHAR(10) 
    DECLARE @Jourprod VARCHAR(20) 
    DECLARE @type_machine VARCHAR(10) 
    DECLARE @produit VARCHAR(10) 
    DECLARE @query VARCHAR(2000) 
    DECLARE @sql VARCHAR(2000) 
     
    DECLARE curs_eve CURSOR FOR 
     SELECT T_Code_eve_SFR.Champ_Quantités 
     from T_Code_eve_SFR, T_cumul_eve_SFR 
     where T_cumul_eve_SFR.Code_eve = T_Code_eve_SFR.Code_SFR 
     and  T_cumul_eve_SFR.Type_Machine_SFR =  T_Code_eve_SFR.Type_Machine_SFR 
     
    DECLARE curs_agent CURSOR FOR 
     Select agent 
     from T_cumul_eve_SFR 
    DECLARE curs_equipe CURSOR FOR 
     Select equipe 
     from T_cumul_eve_SFR 
    DECLARE curs_machine CURSOR FOR 
     Select machine 
     from T_cumul_eve_SFR 
    DECLARE curs_jourprod CURSOR FOR 
     Select jourprod 
     from T_cumul_eve_SFR 
    DECLARE curs_produit CURSOR FOR 
     Select produit 
     from T_cumul_eve_SFR 
    DECLARE curs_type_machine CURSOR FOR 
     Select Type_Machine_SFR 
     from T_cumul_eve_SFR 
     
    OPEN curs_eve 
    FETCH curs_eve INTO @eve 
    OPEN curs_equipe 
    FETCH curs_equipe INTO @equipe 
    OPEN curs_agent 
    FETCH curs_agent INTO @agent 
    OPEN curs_machine 
    FETCH curs_machine INTO @machine 
    OPEN curs_jourprod 
    FETCH curs_jourprod INTO @jourprod 
    OPEN curs_type_machine 
    FETCH curs_type_machine INTO @type_machine 
    OPEN curs_produit 
    FETCH curs_produit INTO @produit 
     
    set @sql = 'UPDATE T_SFR_RTO 
    SET T_SFR_RTO.'+@eve+'   = T_cumul_eve_SFR.Param 
    FROM T_Cumul_eve_SFR, T_Code_eve_SFR 
    where T_Cumul_eve_SFR.Code_eve = T_Code_eve_SFR.Code_SFR 
    and  T_Cumul_eve_SFR.Type_machine_SFR = T_Code_eve_SFR.Type_Machine_SFR 
    and T_Code_eve_SFR.champ_quantités = '+@eve+' 
    and T_Cumul_eve_SFR.jourprod ='+@jourprod+' 
    and T_Cumul_eve_SFR.agent = '+@agent+' 
    and T_Cumul_eve_SFR.equipe = '+@equipe+' 
    and T_Cumul_eve_SFR.machine = '+@machine+' 
    and T_Cumul_eve_SFR.Type_Machine_SFR = '+@type_machine+' 
    and T_Cumul_eve_SFR.Produit = '+@produit+' 
    and T_SFR_RTO.Jourprod = T_Cumul_eve_SFR.JourProd 
    AND T_SFR_RTO.Type_Machine_SFR = T_Cumul_eve_SFR.Type_Machine_SFR 
    AND T_SFR_RTO.produit=T_Cumul_eve_SFR.produit 
    AND T_SFR_RTO.machine=T_Cumul_eve_SFR.machine 
    AND T_SFR_RTO.agent=T_Cumul_eve_SFR.agent 
    AND T_SFR_RTO.equipe=T_Cumul_eve_SFR.equipe 
    ' 
    exec(@sql) 
     
    GO
    Le problème est que j'ai une erreur de synthaxe au niveau de l'exécution de la requète dynamique et plus précisément à cause des variables qui sont considérées non pas comme des valeurs mais comme des noms de champs donc forcément cela ne marche pas!


    Je ne sais plus quoi essayer. Est -ce que la technique "curseurs" est adaptée à ce genre de manipulation? Ou y-a t-il d'autres moyens utilisant des requètes statiques (avec pivots)?

    J'espère avoir été clair dans mes explications! Pour d'avantages de précisions n'hésitez pas à me demander.

    Merci d'avance pour le temps que vous m'accordez!

    P.S : Ci-joint les scripts et des images des différentes tables utilisées.

    Cordialement!!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    SET @sql = 'UPDATE T_SFR_RTO
    SET T_SFR_RTO.'
    +@eve+' = T_cumul_eve_SFR.Param
    FROM T_Cumul_eve_SFR, T_Code_eve_SFR
    where T_Cumul_eve_SFR.Code_eve = T_Code_eve_SFR.Code_SFR
    and T_Cumul_eve_SFR.Type_machine_SFR = T_Code_eve_SFR.Type_Machine_SFR
    and T_Code_eve_SFR.champ_quantités = '
    +@eve+'
    and T_Cumul_eve_SFR.jourprod ='
    +@jourprod+'
    and T_Cumul_eve_SFR.agent = '
    +@agent+'
    and T_Cumul_eve_SFR.equipe = '
    +@equipe+'
    and T_Cumul_eve_SFR.machine = '
    +@machine+'
    and T_Cumul_eve_SFR.Type_Machine_SFR = '
    +@type_machine+'
    and T_Cumul_eve_SFR.Produit = '
    +@produit+'
    and T_SFR_RTO.Jourprod = T_Cumul_eve_SFR.JourProd
    AND T_SFR_RTO.Type_Machine_SFR = T_Cumul_eve_SFR.Type_Machine_SFR
    AND T_SFR_RTO.produit=T_Cumul_eve_SFR.produit
    AND T_SFR_RTO.machine=T_Cumul_eve_SFR.machine
    AND T_SFR_RTO.agent=T_Cumul_eve_SFR.agent
    AND T_SFR_RTO.equipe=T_Cumul_eve_SFR.equipe
    '
    essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    and T_Cumul_eve_SFR.Produit = '''+@produit+'''
    la double quote permet de dire que tu veux une quote.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    OUI BRAVO!!
    Un grand merci a ylarvor pour son aide!!!!

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

Discussions similaires

  1. [debutant]compatibilite msde sql serveur 2000
    Par ChristopheOce dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/01/2006, 08h39
  2. [MS SQL Serveur 2000] Problème sauvegarde restauration
    Par m-mas dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/11/2005, 12h25
  3. [debutant]Plan de maintenance sous sql serveur 2000
    Par christophebmx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/05/2005, 12h18
  4. Taille Maxi pour un SQL SERVEUR 2000
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/07/2003, 09h37
  5. Supprimer une colonne sous SQL Serveur 2000
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/07/2003, 12h24

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