2010-01-21 9 views
2

Voici une version simplifiée d'une requête que j'ai déjà créée. La requête fonctionne correctement, mais je n'arrive pas à comprendre comment obtenir la déclaration XML en haut du code XML généré. J'ai essayé plusieurs choses et cherché partout sur Google, mais hélas, je n'arrive pas à trouver comment le faire ... ou même si c'est possible.Déclaration XML avec "FOR XML PATH" dans SQL Server 2005

select 
    'Dimension' "@type", 
    (
     select 
      (
       select 
        'X102' "TransactionType", 
        convert(varchar, getdate(), 104) "Transfer/TransferDate", 
        convert(varchar, getdate(), 108) "Transfer/TransferTime" 
       for xml path (''), type 
      ) "TransactionInformation" 
     for xml path (''), type 
    ) 
for xml path ('DimensionImport'), type 

me donne ...

<DimensionImport type="Dimension"> 
    <TransactionInformation> 
     <TransactionType>X102</TransactionType> 
     <Transfer> 
      <TransferDate>21.01.2010</TransferDate> 
      <TransferTime>15:46:36</TransferTime> 
     </Transfer> 
    </TransactionInformation> 
</DimensionImport> 

Je ... vouloir

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<DimensionImport type="Dimension"> 
    <TransactionInformation> 
     <TransactionType>X102</TransactionType> 
     <Transfer> 
      <TransferDate>21.01.2010</TransferDate> 
      <TransferTime>15:46:36</TransferTime> 
     </Transfer> 
    </TransactionInformation> 
</DimensionImport> 

Nous vous remercions à l'avance pour toute aide que vous pourriez être en mesure de prêter .

+1

duplication possible de [Comment ajouter le codage xml À xml Sortie dans SQL Server] (http://stackoverflow.com/questions/9002403/how -to-add-xml-encodage-xml-version-1-0-encodage-utf-8-à-xml-output-in) – rcdmk

+0

Je pense que ce serait l'inverse. J'ai d'abord posé ma question. –

Répondre

1

Voici ce que je fini par faire. Le type de données n'est pas renvoyé en tant que type de données XML, mais je peux le gérer.

select '<?xml version="1.0" encoding="ISO-8859-1" ?>' + 
(
    select 
     'Dimension' "@type", 
     (
      select 
       (
        select 
         'X102' "TransactionType", 
         convert(varchar, getdate(), 104) "Transfer/TransferDate", 
         convert(varchar, getdate(), 108) "Transfer/TransferTime" 
        for xml path (''), type 
       ) 
      for xml path ('TransactionInformation'), type 
     ), 
     (
      ... queried up data here ... 
     ) 
    for xml path ('DimensionImport') 
) 
3

Il est en désordre, mais vous pouvez juste concaténer sur l'avant ...

SELECT '<? xml...>' + 
(select 
    'Dimension' "@type", 
    (
     select 
      (
       select 
        'X102' "TransactionType", 
        convert(varchar, getdate(), 104) "Transfer/TransferDate", 
        convert(varchar, getdate(), 108) "Transfer/TransferTime" 
       for xml path (''), type 
      ) "TransactionInformation" 
     for xml path (''), type 
    ) 
for xml path ('DimensionImport'), type) 
+0

Hélas, ça n'a pas marché. Erreur renvoyée: Les types de données varchar et xml sont incompatibles dans l'opérateur add. –

+0

Oui ... si vous supprimez votre 'type', puis que vous convertissez le résultat entier en XML, cela vous aidera. Comme ceci: SELECT cast ('' + (sélectionnez 'Dimension' comme [@type] .... pour le chemin xml ('DimensionImport')) en tant que xml) –

+1

Hmmm ... it ** fonctionne ** si je supprimer le codage de caractères dans la déclaration xml, mais pas si je l'ai là-dedans. Avec le codage de caractères dans la déclaration, je reçois cette erreur "XML analyse: ligne 1, caractère 39, impossible de changer l'encodage". Lorsque je supprime l'encodage de caractères **, il s'exécute **, mais je n'ai toujours pas la déclaration xml ajoutée au xml. Il montre seulement le XML original. Pouah!! –

2

essayez ceci:

select '<?xml version="1.0" encoding="ISO-8859-1" ?>' + 
     (your whole upper select here) 
+0

Erreur renvoyée: Les types de données varchar et xml sont incompatibles dans l'opérateur add. –

1

Malheureusement, ce que j'ai trouvé dans SQL Server Books Online:

Le Déclaration XML PI dans une instance n'est pas conservé lorsque l'instance est stockée dans la base de données. Par exemple:

Copy Code CREATE TABLE T1 (Col1 int primary key, Col2 xml) 
GO 
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>') 
GO 
SELECT Col2 
FROM T1 

Le résultat est <doc/>.

La seule solution est de renvoyer le XML comme varchar (max) Type:

select '<?xml version="1.0" encoding="ISO-8859-1" ?>' 
+ 
cast((
select 
    'Dimension' "@type", 
    (
     select 
      (
       select 
        'X102' "TransactionType", 
        convert(varchar, getdate(), 104) "Transfer/TransferDate", 
        convert(varchar, getdate(), 108) "Transfer/TransferTime" 
       for xml path (''), type 
      ) "TransactionInformation" 
     for xml path (''), type 
    ) 
for xml path ('DimensionImport'), type) as varchar(max)) 
+0

C'est essentiellement ce que j'ai fini par faire. Merci. –

0

En 2008 R2 de l'EM, si vous ouvrez « Enregistrer sous » bouton et expand « Enregistrer », vous pouvez enregistrer le codage de sorcière, après, la déclaration xml est ajoutée automatiquement.

Espérons que ça aide. Cordialement.

Questions connexes