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 :

Requête MERGE et perte de données


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut Requête MERGE et perte de données
    Salut le forum voila j'ai écrit cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    --------------------------------------index des stations --------------------------------------------------------
    MERGE INTO  [SERVER\MSSQLSERVERS].[GESTIONPETROLE].[dbo].[INDEXPARSTATION] AS target
    USING OPENQUERY (
      [DESKTOP-RSHSD6C\SQLEXPRESS], 
        'SELECT * FROM  [DESKTOP-RSHSD6C\SQLEXPRESS].[GESTIONPETROLE].[dbo].[INDEXPARSTATION]'
    ) AS source
        ON source.[Idindex]=target.[Idindex] AND target.[Dates]=source.[Dates] AND target.[INDEX]=source.[INDEX]
    	WHEN MATCHED THEN 
    	UPDATE SET [Idindex]=source.[Idindex],[Dates]=source.[Dates],[IdCuve]=source.[IdCuve],[IDPRODUIT]=source.[IDPRODUIT],[IDPISTOLET]=source.[IDPISTOLET],[IDCLIENT]=source.[IDCLIENT],[INDEX]=source.[INDEX],[HEURS]=source.[HEURS]
    WHEN NOT MATCHED BY TARGET THEN
    INSERT ([Idindex],[Dates],[IdCuve],[IDPRODUIT],[IDPISTOLET],[IDCLIENT],[INDEX],[HEURS])
    VALUES (source.[Idindex],source.[Dates],source.[IdCuve],source.[IDPRODUIT],source.[IDPISTOLET],source.[IDCLIENT],source.[INDEX],source.[HEURS]);
    qui semble bien fonctionner. Mais si je fait au moins 2 ou trois jours avant d’exécuter cette requête, je constate toujours des lignes qui ont disparu dans la table cible alors que je ne fait pas de suppression. J'aimerai savoir ce qui m’échappe sur cette requête ou sur sql merge?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il faudrait avoir le ddl des tables au moins.
    Est-ce qu'il y aurait des doublons et un problème d'intégrité ?

  3. #3
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonjour voila la structure de la table
    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
    CREATE TABLE [dbo].[INDEXPARSTATION](
    	[Idindex] [int] NOT NULL,
    	[Dates] [date] NOT NULL,
    	[IdCuve] [int] NOT NULL,
    	[IDPRODUIT] [int] NOT NULL,
    	[IDPISTOLET] [int] NOT NULL,
    	[IDCLIENT] [bigint] NOT NULL,
    	[INDEX] [decimal](18, 3) NOT NULL,
    	[HEURS] [datetime] NULL,
    PRIMARY KEY CLUSTERED 
    (
    	[Idindex] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    ALTER TABLE [dbo].[INDEXPARSTATION]  WITH CHECK ADD  CONSTRAINT [FK_INDEXPARSTATION_CLIENTS] FOREIGN KEY([IDCLIENT])
    REFERENCES [dbo].[CLIENTS] ([IDCLIENT])
    GO
     
    ALTER TABLE [dbo].[INDEXPARSTATION] CHECK CONSTRAINT [FK_INDEXPARSTATION_CLIENTS]
    GO
     
    ALTER TABLE [dbo].[INDEXPARSTATION]  WITH CHECK ADD  CONSTRAINT [FK_INDEXPARSTATION_CUVE] FOREIGN KEY([IdCuve])
    REFERENCES [dbo].[CUVE] ([IdCuve])
    GO
     
    ALTER TABLE [dbo].[INDEXPARSTATION] CHECK CONSTRAINT [FK_INDEXPARSTATION_CUVE]
    GO
     
    ALTER TABLE [dbo].[INDEXPARSTATION]  WITH CHECK ADD  CONSTRAINT [FK_INDEXPARSTATION_PISTOLET] FOREIGN KEY([IDPISTOLET])
    REFERENCES [dbo].[PISTOLET] ([IDPISTOLET])
    GO
     
    ALTER TABLE [dbo].[INDEXPARSTATION] CHECK CONSTRAINT [FK_INDEXPARSTATION_PISTOLET]
    GO
     
    ALTER TABLE [dbo].[INDEXPARSTATION]  WITH CHECK ADD  CONSTRAINT [FK_INDEXPARSTATION_PRODUIT] FOREIGN KEY([IDPRODUIT])
    REFERENCES [dbo].[PRODUIT] ([IDPRODUIT])
    GO
     
    ALTER TABLE [dbo].[INDEXPARSTATION] CHECK CONSTRAINT [FK_INDEXPARSTATION_PRODUIT]
    GO
    pour ce qui est des doublons non il n'y a pas de doublon

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Massigne Voir le message
    Salut le forum voila j'ai écrit cette requête qui semble bien fonctionner.
    Qui semble avez vous validé le fonctionnement en cas de match et de not match ?

    Citation Envoyé par Massigne Voir le message
    Mais si je fait au moins 2 ou trois jours avant d’exécuter cette requête, je constate toujours des lignes qui ont disparu dans la table cible alors que je ne fait pas de suppression.
    Disparu dans la cible ? Faut il comprendre que des lignes dont vous aviez vérifié la présence et noté l'identifiant primairedans la cible n'y sont plus (ces identifiants primaires ont disparu), ou que des lignes présentes dans la source n'ont pas été ajoutées dans la cible ?

  5. #5
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonjour escartefigue dans la table cible qui est sur le serveur central les données était enregistrer jusqu'au 24/07/2019 mais dans la table source les données sont enregistrés jusqu'au 18/07/2019 mais certain données de la tables source n'existe pas dans la table cible. lorsque j’exécute ma requête merge, je me rend compte que les données qui n'existait pas dans la table cible sont bien ajouter mais par contre les données du 19/07/2019 au 24/07/2019 ont été supprimer et c'est donc çà mon problème.

  6. #6
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Massigne Voir le message
    Mais si je fait au moins 2 ou trois jours avant d’exécuter cette requête,
    Si vous faites quoi 2-3 jours avant ?
    est-ce que vous observez ce comportement pendant l'execution de la requete ? n'y a-t-il pas d'autres utilisateurs qui pourraient effectuer des opération dans le même laps de temps ?

  7. #7
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonjour aieeeuuuuu
    pour le moment la requête merge je suis le seule à exécuter et la premier fois les utilisateurs se sont plain de voir leur enregistrement supprimer
    juste après que j'ai exécuter la requête et hier j'ai mois même fait ce constat après que j'ai exécuter la requête
    et au départ la condition portait uniquement sur la clé primaire. C'est après le constat que j'ai ajouter certaine conditions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    --------------------------------------index des stations --------------------------------------------------------
    MERGE INTO  [SERVER\MSSQLSERVERS].[GESTIONPETROLE].[dbo].[INDEXPARSTATION] AS target
    USING OPENQUERY (
      [DESKTOP-RSHSD6C\SQLEXPRESS], 
        'SELECT * FROM  [DESKTOP-RSHSD6C\SQLEXPRESS].[GESTIONPETROLE].[dbo].[INDEXPARSTATION]'
    ) AS source
        ON source.[Idindex]=target.[Idindex] AND target.[Dates]=source.[Dates] AND target.[INDEX]=source.[INDEX]
    	WHEN MATCHED THEN 
    	UPDATE SET [Idindex]=source.[Idindex],[Dates]=source.[Dates],[IdCuve]=source.[IdCuve],[IDPRODUIT]=source.[IDPRODUIT],[IDPISTOLET]=source.[IDPISTOLET],[IDCLIENT]=source.[IDCLIENT],[INDEX]=source.[INDEX],[HEURS]=source.[HEURS]
    WHEN NOT MATCHED BY TARGET THEN
    INSERT ([Idindex],[Dates],[IdCuve],[IDPRODUIT],[IDPISTOLET],[IDCLIENT],[INDEX],[HEURS])
    VALUES (source.[Idindex],source.[Dates],source.[IdCuve],source.[IDPRODUIT],source.[IDPISTOLET],source.[IDCLIENT],source.[INDEX],source.[HEURS]);

  8. #8
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    est-ce que vous constatez toujours le problème après avoir ajouté les colonnes Dates et Index dans la condition de jointure ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/11/2016, 17h19
  2. [AC-2007] Requête UNION et perte de données
    Par jmlabatut dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/12/2009, 15h49
  3. Réponses: 3
    Dernier message: 14/10/2009, 18h50
  4. Sql perte de données sur deux requêtes
    Par parasol007 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/06/2008, 17h37
  5. [Access2003]-Perte de données requête left join
    Par alcabk dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/10/2007, 11h45

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