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 :

Doublon lors de l'exploitation d'un fichier xml avec curseur [2012]


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Points : 91
    Points
    91
    Par défaut Doublon lors de l'exploitation d'un fichier xml avec curseur
    Bonjour,

    Tout d’abord, merci pour votre aide éventuelle.

    Voici le contexte, j’ai des fichiers xml que je stocke dans une table dans base de données de transition avant de les injecter sur ma bonne base. Le but étant d’exploiter ces données donc je les exploite pour remplir différente table.

    J’ai une table catégorie avec très peu d’information. Une ID, deux labels, un champ actif et un champ qui contient comme simple référence l’id de la donnée de la source qui envoi les données.

    J’ai un curseur qui parcourt tous les fichiers de type catégorie afin d’en extraire les données.

    Avant d’injecter les données, je souhaite vérifier si l’ID de la source est déjà présente afin de ne pas l’injecter.

    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
     
    USE [ZoneCustomerExchange]
    GO
    /****** Object:  StoredProcedure [dbo].[SetDataCategoriesTravelNote]    Script Date: 19-10-16 11:11:18 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[SetDataCategories]
    	-- Add the parameters for the stored procedure here
     
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    	DECLARE @idFile int
     
    	--travelfile
    	DECLARE XmlData CURSOR FOR 
    						SELECT  
    							[dbo].[FilesXML].IDFilesXML 
    						FROM [dbo].[FilesXML]
    						WHERE 
    							[dbo].[FilesXML].Parite = 1 
    						AND [dbo].[FilesXML].FKSource = 1
    						AND [dbo].[FilesXML].DateExplore IS NULL
    						AND [dbo].[FilesXML].Type = 'Categories'
       OPEN XmlData
     
       FETCH XmlData INTO @idFile   
       WHILE @@FETCH_STATUS = 0
    	BEGIN
    			INSERT INTO [dbo].[category]
    			( [IDSourceIdCategory],[labelcategoryfr],[labelcategorynl],[active]
    			,[IDSource],[createddate],[createdby]
    			)
    			SELECT
    				  pref.value('(idcategory/text())[1]', 'varchar(255)') as IDSourceIdCategory,
    				  pref.value('(labelcategoryfr/text())[1]', 'varchar(255)') as labelcategoryfr,
    				  pref.value('(labelcategorynl/text())[1]', 'varchar(255)') as labelcategorynl,
    				  pref.value('(Active/text())[1]', 'bit') as Active,
    				  1 as IdSource,
    				  getdate() as createddate,
    				  'SYSTEM' as createdby
     
    			FROM  
    				FilesXML CROSS APPLY
    				XmlData.nodes('/Root/Category') AS Category(pref)
    			WHERE 
    				FilesXML.IDFilesXML = @idFile
    			AND NOT EXISTS (
    				SELECT [dbo].[category].[idcategory]
    				FROM [dbo].[category]
    				WHERE [IDSourceIdCategory] =  pref.value('(idcategory/text())[1]', 'varchar(255)')
     
    				)
    		FETCH XmlData INTO @idFile
    	END
    	CLOSE XmlData
    	DEALLOCATE XmlData
    END
    Cette requête me produit des doublons et je me retrouve avec plusieurs fois la même clé source. Je ne perçois pas la raison, je dois arriver à mes limites de compréhension ou il me manque un concept pour comprendre le processus.

    Pourriez-vous m’éclairer et m’indiquer la bonne méthode ?

    D’avance, merci.
    Raphaël.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Pourquoi utiliser un curseur, une logique ensembliste serait beaucoup plus performante

  3. #3
    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
    Bonjour,

    N'est-ce pas votre XML qui contient les doublons ?

    Quelle est sa structure ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Points : 91
    Points
    91
    Par défaut
    Je viens de vérifier, je reçois les fichiers par milliers et j'avais loupé l'informations.

    Effectivement, je vois que dans un même fichier xml, je reçois plusieurs fois la même donnée.

    Donc au moment du SELECT l'enregistrement n'existe pas encore ce qui fait qu'il m'insert la totalité.

    Je viens d'ajouter un petit distinct sur mon select.

    Pourquoi utiliser un curseur, une logique ensembliste serait beaucoup plus performante
    J'en suis conscient comme je suis conscient que j'ai du travail de formation sur ce point. Je ne l'ai pas fait parce que je ne voyais pas comment faire. Je dois me dégager du temps pour me casser un peu les dents sur ça.

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

Discussions similaires

  1. Problème lors de la lecture d'un fichier xml avec XMLBeans
    Par oscar78 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 07/09/2007, 14h04
  2. exception lors de l ecriture ds un fichier xml
    Par ryoussef19 dans le forum Visual C++
    Réponses: 2
    Dernier message: 01/08/2007, 10h34
  3. [SimpleXML] Exploitation D'un Fichier Xml
    Par django76 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/05/2007, 13h00
  4. Réponses: 6
    Dernier message: 20/12/2006, 13h21
  5. [VB.NET]Erreur lors de la Création d'un fichier XML
    Par ZbergK dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/10/2006, 14h01

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