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

Développement SQL Server Discussion :

Réalisation d'un script SQL insert et update


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut Réalisation d'un script SQL insert et update
    Bonjour à tous,

    je voudrais vos conseils pour savoir si il possible de réaliser un script sql.

    Si oui, comment doit début mon script, comment le constituer?

    - j'ai les requêtes (ci-dessous)
    - l'ordre exécution mais je sais pas comment procéder .


    1er étape: une requête de départ qui récupère une liste de nom_catégorie (+ code) d'une table:

    (GroupoCliente est forcement un chiffre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select distinct GroupoCliente, tgAgrupCliente.Descrip
    From taDctoVenta 
    Left Outer Join  tgAgrupCliente on (tgAgrupCliente.codigo = taDctoVenta .GrupoCliente)
    where emp in ('001','002','003','004','005','006','007') and GrupoCliente IS NULL
    2ème: création des barèmes de remises:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into tgBaremoDcto (Codigo, Descrip,Estaller,EsAlmacen) VALUES (GroupoCliente+100,tgAgrupCliente.Descrip,'1','1')
    3ème mise à jour table client:
    a. Champ A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update tgClienteFac set tgClienteFac.AlmBaremoDcto = (tgClienteFac.AlmAgrupCliente +100) 
    where tgClienteFac.Emp IN('001','002','003,'004','005','006','007') 
    and tgClienteFac.AlmAgrupCliente=GroupoCliente 
    and tgClienteFac.AlmBaremoDcto IS NULL
    b.Champ B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    update tgClienteFac set tgClienteFac.TallBaremoDcto = (tgClienteFac.TallAgrupCliente +100) 
    where tgClienteFac.Emp IN('001','002','003,'004','005','006','007') 
    and tgClienteFac.TallAgrupCliente=GroupoCliente 
    and tgClienteFac.TallBaremoDcto IS NULL)
    4ème mise à jour de la table de départ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update taDctoVenta set BaremoDcTo= (GrupoCliente +100), GrupoCliente='' 
    where taDctoVenta.EMP IN('001','002','003,'004','005','006','007')
    and taDctoVenta.GrupoCliente=GroupoCliente
    merci d'avance pour vos conseils et vos explications

    guigui69

  2. #2
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Avec le Transact SQL ...

    Jeter un coup d'oeil sur ce lien
    =>
    http://sqlpro.developpez.com/cours/s...r/transactsql/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Bonjour,

    Merci pour votre lien , celui parle de curseur

    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
     
        DECLARE @idcategorieclient varchar(12), @nomcategorieclient varchar(64)
     
        DECLARE Curseurcatclient CURSOR 
        FOR
          SELECT distinct GroupoCliente as GroupoCliente  , tgAgrupCliente.Descrip as description
          FROM taDctoVenta
          LEFT OUTER JOIN tgAgrupCliente ON (tgAgrupCliente.codigo = taDctoVenta .GrupoCliente)
          WHERE emp IN ('001','002','003','004','005','006','007') AND GrupoCliente IS NULL
     
          OPEN Curseurcatclient
     
          FETCH NEXT FROM Curseurcatclient INTO @idcategorieclient, @nomcategorieclient 
     
          WHILE @@FETCH_STATUS = 0 
          BEGIN
     
    insert into tgBaremoDcto (Codigo, Descrip,Estaller,EsAlmacen) VALUES (@idcategorieclient+100,@nomcategorieclient ,'1','1')
     
    update tgClienteFac set tgClienteFac.AlmBaremoDcto = (tgClienteFac.AlmAgrupCliente +100) where tgClienteFac.Emp IN('001','002','003','004','005','006','007') and tgClienteFac.AlmAgrupCliente=@idcategorieclient and tgClienteFac.AlmBaremoDcto IS NULL
     
    update tgClienteFac set tgClienteFac.TallBaremoDcto = (tgClienteFac.TallAgrupCliente +100)  where tgClienteFac.Emp IN('001','002','003','004','005','006','007') and tgClienteFac.TallAgrupCliente=@idcategorieclient and tgClienteFac.TallBaremoDcto IS NULL
     
    update taDctoVenta set BaremoDcTo= (@idcategorieclient+100), GrupoCliente='*' where taDctoVenta.EMP IN('001','002','003','004','005','006','007') and taDctoVenta.GrupoCliente=@idcategorieclient
     
     
          END
          CLOSE Curseurcatclient 
          DEALLOCATE Curseurcatclient
    - Est-ce que je suis dans la bonne demarche ?
    - Quand je déclare le type de variable (varchar), en fonction de quoi je la choisi ? ( de la table ? des données envoyées?

    guigui69

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Mieux vaut éviter les curseurs, et traiter les données dans leur ensemble par requête SQL.

    Dans votre cas, cela donnerait quelque chose comme (sans doute quelques erreurs a corriger, mais le principe est là):
    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
     
    insert into tgBaremoDcto (Codigo, Descrip,Estaller,EsAlmacen) 
        Select distinct GroupoCliente, tgAgrupCliente.Descrip,'1','1'
        From taDctoVenta 
        Left Outer Join  tgAgrupCliente on (tgAgrupCliente.codigo = taDctoVenta .GrupoCliente)
        where emp in ('001','002','003','004','005','006','007') and GrupoCliente IS NULL
     
    update tgClienteFac 
        set tgClienteFac.AlmBaremoDcto = tgClienteFac.AlmAgrupCliente +100
        ,   tgClienteFac.TallBaremoDcto = tgClienteFac.TallAgrupCliente +100 
    FROM tgClienteFac
    INNER JOIN (
    	   Select distinct GroupoCliente, tgAgrupCliente.Descrip
    	   From taDctoVenta 
    	   Left Outer Join  tgAgrupCliente on (tgAgrupCliente.codigo = taDctoVenta .GrupoCliente)
    	   where emp in ('001','002','003','004','005','006','007') and GrupoCliente IS NULL
        ) AS T
        ON tgClienteFac.AlmAgrupCliente=T.GroupoCliente 
    where tgClienteFac.Emp IN('001','002','003','004','005','006','007') 
    and tgClienteFac.AlmBaremoDcto IS NULL
     
     
    update taDctoVenta 
        set BaremoDcTo= (GrupoCliente +100), GrupoCliente='' 
    FROM taDctoVenta
    INNER JOIN (
    	   Select distinct GroupoCliente, tgAgrupCliente.Descrip
    	   From taDctoVenta 
    	   Left Outer Join  tgAgrupCliente on (tgAgrupCliente.codigo = taDctoVenta .GrupoCliente)
    	   where emp in ('001','002','003','004','005','006','007') and GrupoCliente IS NULL
        ) AS T
        ON tgClienteFac.AlmAgrupCliente=T.GroupoCliente 
    where taDctoVenta.EMP IN('001','002','003','004','005','006','007')

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/07/2010, 13h09
  2. [Linq to Sql] Insert ou update ? telle est la question ...
    Par Ntotor dans le forum Accès aux données
    Réponses: 5
    Dernier message: 19/11/2008, 14h24
  3. Update Automatique-script Sql
    Par _shuriken_ dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 19/06/2007, 17h17
  4. [MySQL] choix en insert et update PHP SQL
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 04/05/2006, 19h21
  5. [Pl/Sql] Insert ou Update dans une fonction
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 12
    Dernier message: 18/04/2006, 15h28

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