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 :

[MSSQL 2000] Construire un fichier XML AUTO avec une valeur


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 107
    Points : 50
    Points
    50
    Par défaut [MSSQL 2000] Construire un fichier XML AUTO avec une valeur
    Bonjour,

    Je dois construire un fichier XML à partir de données dans une table. Voici ce que je dois obtenir, notez la balise <Promos> et valeur "Default":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    - <Promos>
        - <PromoType Id="Home" Theme="Default">
          <PromoName Language="eng" FromDate="1900-01-01" ToDate="2000-01-01">Default</PromoName>
          <PromoName Language="eng" FromDate="2000-01-01" ToDate="2100-01-01">Default</PromoName>
        </PromoType>
      </Promos>
    Et voici ce que j'obtiens avec la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      <PromoType Id="Home" Theme="Default">
        <PromoName Language="eng" FromDate="2009-04-06T08:30:00" ToDate="2009-04-07T09:30:00" VALUE="Default" />
        <PromoName Language="eng" FromDate="2009-04-06T09:00:00" ToDate="2009-04-07T09:00:00" VALUE="Default" />
    </PromoType>
    Requête SQL:

    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
      use maBD
      go
     
      SELECT   TOP 2
        PromoType.[Id] AS Id,
        PromoType.[THEME] AS Theme,
        PromoName.LANG_ID  AS Language,
        PromoName.FROM_DATE AS FromDate,
        PromoName.TO_DATE AS ToDate,
        PromoName.VALUE
      FROM EPC_PROMO  PromoType
        INNER JOIN EPC_PROMO PromoName
        ON PromoType.ID = PromoName.ID
      WHERE PromoType.GROUP_KEY = 'monGROUPE'
      ORDER BY PromoType.ID
      FOR XML AUTO
    Avec FOR XML EXPLICIT, en utilisant la Directive element, la valeur se retrouve justement sur une hiérachie isolée et il doit être inclus avec les autres champs. Donc ça ne fonctionne pas de cette façon.

    Existe-t-il une façon de créer un tel fichier XML automatiquement ?


    Merci beaucoup pour votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Malheureusement vous devez écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    USE maBD
    GO
     
    SELECT TOP 2 PromoType.[Id] AS Id,
    				PromoType.[THEME] AS Theme,
    				PromoName.LANG_ID  AS language,
    				REPLACE(CONVERT(VARCHAR(10), PromoName.FROM_DATE, 102), '.', '-') AS FromDate,
    				REPLACE(CONVERT(VARCHAR(10), PromoName.TO_DATE, 102), '.', '-') AS ToDate,
    				PromoName.value
    FROM dbo.EPC_PROMO PromoType
    INNER JOIN dbo.EPC_PROMO PromoName ON PromoType.ID = PromoName.ID
    WHERE PromoType.GROUP_KEY = 'monGROUPE'
    ORDER BY PromoType.ID
    FOR XML AUTO
    @++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 107
    Points : 50
    Points
    50
    Par défaut
    Merci pour votre remarque sur la date.

    Pourquoi faut-il utiliser le format date 121 ?

    Le format 126 (sans espaces) n'est-il pas justement conçu pour XML ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FromDate="2009-12-20T10:45:00"
    ?

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Aucune idée pour les deux questions

    @++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 107
    Points : 50
    Points
    50
    Par défaut
    Je repose ma question de départ:

    Quelqu'un a-t-il une idée pour bâtir un fichier XML formé de la façon suivante, à partir d'une requête SQL ("Default" étant un élément) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      <Promos>
          <PromoType Id="Home" Theme="Default">
          <PromoName LANGUAGE="eng" FromDate="1900-01-01" ToDate="2000-01-01">Default</PromoName>
          <PromoName LANGUAGE="eng" FromDate="2000-01-01" ToDate="2100-01-01">Default</PromoName>
        </PromoType>
      </Promos>
    Merci.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Février 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut noeud parent
    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
    USE maBD
      go
     
      SELECT   TOP 2
        PromoType.[Id] AS Id,
        PromoType.[THEME] AS Theme,
        PromoName.LANG_ID  AS LANGUAGE,
        PromoName.FROM_DATE AS FromDate,
        PromoName.TO_DATE AS ToDate,
        PromoName.VALUE
      FROM EPC_PROMO  PromoType
        INNER JOIN EPC_PROMO PromoName
        ON PromoType.ID = PromoName.ID
      WHERE PromoType.GROUP_KEY = 'monGROUPE'
      ORDER BY PromoType.ID
      FOR XML AUTO, ROOT('Promos')
    Normalement en ajoutant l'option ROOT, tu peux ajouter un noeud parent

  7. #7
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    La clause FOR XML AUTO ne vous permettra pas de gérer les valeurs de colonne en élément comme vous le souhaitez. Il faut utiliser la clause FOR XML EXPLICIT avec SQL Server 2000 pour cela.

    Exemple (à adapter dans votre cas) :

    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
     
    DECLARE @EPC_PROMO TABLE
    (
     i INT,
     Id VARCHAR(20),
     THEME VARCHAR(20),
     LANG_ID VARCHAR(20),
     FROM_DATE DATETIME,
     TO_DATE DATETIME,
     VALUE VARCHAR(20)
    );
     
    INSERT INTO @EPC_PROMO VALUES (1,'Home', 'Default', 'eng', '1900-01-01', '2000-01-01', 'default');
    INSERT INTO @EPC_PROMO VALUES (2,'Home', 'Default', 'eng', '2000-01-01', '2100-01-01', 'default');
     
    SELECT
    	1 AS Tag,
        NULL AS Parent,
        Id AS [PromoType!1!Id],
        THEME AS [PromoType!1!Theme],
        NULL AS [PromoName!2!!ELEMENT],
        NULL AS [PromoName!2!LANGUAGE],
        NULL AS [PromoName!2!FromDate],
        NULL AS [PromoName!2!ToDate]
    FROM @EPC_PROMO
    UNION 
    SELECT
    	2 AS Tag,
        1 AS Parent,
        Id,
        THEME,
        VALUE,
        LANG_ID,
        CONVERT(VARCHAR, FROM_DATE, 112),
        CONVERT(VARCHAR, TO_DATE, 112)
    FROM @EPC_PROMO
    FOR XML EXPLICIT, ROOT('Promos')
    qui donne le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Promos>
      <PromoType Id="Home" Theme="Default">
        <PromoName LANGUAGE="eng" FromDate="19000101" ToDate="20000101">default</PromoName>
        <PromoName LANGUAGE="eng" FromDate="20000101" ToDate="21000101">default</PromoName>
      </PromoType>
    </Promos>
    ++

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 107
    Points : 50
    Points
    50
    Par défaut
    Merci.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/10/2008, 17h46
  2. implémenter un numéro auto avec une valeur texte
    Par Stagiaireparc dans le forum Modélisation
    Réponses: 1
    Dernier message: 12/07/2007, 22h21
  3. [MSSQL 2000] Réinitialiser un compteur d'auto-incrément
    Par major2 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/01/2006, 14h20
  4. Valider fichier XML : problème avec la DTD
    Par SkIllz2k dans le forum Valider
    Réponses: 2
    Dernier message: 26/04/2005, 17h15
  5. Réponses: 10
    Dernier message: 05/04/2005, 10h25

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