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 :

Requete INSERT INTO et NOT EXISTS


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Par défaut Requete INSERT INTO et NOT EXISTS
    Bonjour voici une requête qui insert les enregistrements de la table GCACHAT_DET vers la table ENTREES_STOCKS. Ma problématique est que je souhaite insert uniquement les enregistrements de GCACHAT_DET qui ne sont pas déjà présents dans ENTREES_STOCKS.

    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
    declare @dateJour datetime,@datedeb datetime
    set @dateJour = '28/02/2020'
    set @datedeb = DATEADD(DAY,1,@dateJour)
     
    insert into ENTREES_STOCKS(ART_CODE,ENTSTK_DTENTREE,ENTSTK_LOT,ENTSTK_PNET,ENTSTK_NBU,ENT_STK_LOT_AKA)
    select GCACHAT_DET.ACH_DATE_CREAT,left(GCACHAT_DET.ACH_TRACABILITE,CHARINDEX('.',GCACHAT_DET.ACH_TRACABILITE)-1),
    GCARTICLE.ART_CODE,GCARTICLE.ART_LIB1,
    GCACHAT_DET.ACH_PDS_NET_REC,GCACHAT_DET.ACH_COLIS_REC,GCACHAT_DET.ACH_LOT
    from ERP_CRETS..AG1.GCACHAT_DET,ERP_CRETS..AG1.GCARTICLE
    where GCACHAT_DET.ACH_ART_CODE = GCARTICLE.ART_CODE
    and GCACHAT_DET.ACH_DATE_CREAT >= @dateJour and GCACHAT_DET.ACH_DATE_CREAT < @datedeb
    and GCARTICLE.ART_STAT2 = '001'
    and GCARTICLE.ART_LIB1 not like '%PORCELET%'
    and GCACHAT_DET.ACH_PDS_NET_REC >0
    and GCACHAT_DET.ACH_COLIS_REC >0
    and GCACHAT_DET.ACH_DEPOT = '1'
     
    --Insert uniquement les enregistrements qui n'existent pas déjà
     
    where not exists
     
    select ART_CODE,ENTSTK_DTENTREE,ENTSTK_LOT,ENTSTK_PNET,ENTSTK_NBU,ENT_STK_LOT_AKA
    from ENTREES_STOCKS;
    Comment dois-je modifier ce code pour cela fonctionne ?
    Merci de votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Voir instruction MERGE

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2018
    Messages : 150
    Par défaut
    Merci beaucoup pour votre aide, voici mon code modifie :

    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
    declare @dateJour datetime,@datedeb datetime
    declare @table table(achDate datetime,achTraca int,artCode varchar(15),artLib varchar(40),
    pdsNet float,nbu int,lotAka float)
    set @dateJour = '28/02/2020'
    set @datedeb = DATEADD(DAY,1,@dateJour)
     
    insert into @table(achDate,achTraca,artCode,artLib,pdsNet,nbu,lotAka)
    select GCACHAT_DET.ACH_DATE_CREAT,left(GCACHAT_DET.ACH_TRACABILITE,CHARINDEX('.',GCACHAT_DET.ACH_TRACABILITE)-1),
    GCARTICLE.ART_CODE,GCARTICLE.ART_LIB1,
    GCACHAT_DET.ACH_PDS_NET_REC,GCACHAT_DET.ACH_COLIS_REC,GCACHAT_DET.ACH_LOT
    from ERP_CRETS..AG1.GCACHAT_DET,ERP_CRETS..AG1.GCARTICLE
    where GCACHAT_DET.ACH_ART_CODE = GCARTICLE.ART_CODE
    and GCACHAT_DET.ACH_DATE_CREAT >= @dateJour and GCACHAT_DET.ACH_DATE_CREAT < @datedeb
    and GCARTICLE.ART_STAT2 = '001'
    and GCARTICLE.ART_LIB1 not like '%PORCELET%'
    and GCACHAT_DET.ACH_PDS_NET_REC >0
    and GCACHAT_DET.ACH_COLIS_REC >0
    and GCACHAT_DET.ACH_DEPOT = '1';
     
     
    MERGE INTO ENTREES_STOCKS
    USING @table
    ON ENTREES_STOCKS.ENT_STK_LOT_AKA = lotAka
    when NOT MATCHED THEN
    insert (ART_CODE,ENTSTK_DTENTREE,ENTSTK_LOT,ENTSTK_PNET,ENTSTK_NBU,ENT_STK_LOT_AKA)
    values(artCode,achDate,achTraca,pdsNet,nbu,lotAka);

  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,

    Vous pourriez vous passer de la table variable et utiliser directement le SELECT comme source du MERGE. Ce sera probablement plus performant (à vérifier tout de même)

    Vous pourriez même envisager de remplacer la table ENTREES_STOCKS par une vue (à voir en fonction du contexte...)

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

Discussions similaires

  1. Insert into if not exists
    Par Coeur de Pirat dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/08/2016, 15h44
  2. Requete INSERT INTO avec IF NOT EXISTS: Est-ce possible ?
    Par yann123456 dans le forum Requêtes
    Réponses: 14
    Dernier message: 15/06/2009, 15h37
  3. Requete INSERT INTO
    Par cheers94wow dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/05/2006, 11h13
  4. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

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