2010-07-19 6 views
1

À partir de SQL Server 2005, je dois effectuer une exportation pour un client vers un format de type xml illustré ci-dessous. Pourquoi ils n'utilisent pas XML, je ne sais pas. Toutes les idées sur la façon de le faire rapidement sans exporter le fichier "FOR XML", puis en écrivant un script désordonné pour parcourir le fichier texte et trouver et remplacer <,>, et chaque balise XML de fermeture? Je vous remercie.SQL Server - Exporter au format xml-like sans balises?

START_FILE: 
DATE: 
COLUMN1:A 
COLUMN2:B 
COLUMN3:C 
COLUMN1:D 
COLUMN2:E 
COLUMN3:F 
COLUMN1:G 
COLUMN2:H 
COLUMN3:I 
END_FILE: 
+1

Il s'agit d'un format de texte brut. Vous ne devriez même pas considérer XML. Comme vous utilisez SSIS, vous pouvez créer une tâche de script qui écrit des données dans un fichier dans ce format. –

Répondre

0

Je suis allé avec la suggestion de Martin d'essayer une requête UNPIVOT, qui était tout nouveau pour moi. En utilisant SSIS, j'exporte maintenant la requête dans un fichier texte formaté exactement comme j'en ai besoin avec un temps d'exécution de seulement quelques secondes. J'utilise une requête comme ci-dessous avec un ":" comme délimiteur de colonne. Super suggestion Martin!

SELECT 'START_FILE' as FieldName, '' as 'FieldValue' 
UNION ALL 
select 'DATE' as FieldName, getDate() as 'FieldValue' 

UNION ALL 

SELECT FieldName, FieldValue 
FROM 
    (
    SELECT 
    Cast(Column1Name as varchar) as VendorColumn1Name, 
    Cast(Column2Name as varchar) as VendorColumn2Name, 
    Cast(Column3Name as varchar) as VendorColumn3Name 
    FROM MyTable 
    ) c 
    UNPIVOT 
    (
    FieldValue for FieldName IN(VendorColumn1Name, VendorColumn2Name, VendorColumn3Name) 
    ) as p 

UNION ALL 
SELECT 'END_FILE' as FieldName, '' as 'FieldValue' 
1
DECLARE @Output nvarchar(max) 
SET @Output = 'START_FILE: 
DATE:' 

SELECT @Output = @Output + ' 
COLUMN1:' + Col1 + ' 
COLUMN2:' + Col2 + ' 
COLUMN3:' + Col3 
FROM YourTable 
ORDER BY Col1 

SELECT @Output + ' 
END_FILE:' AS Result 
+0

La concaténation est une excellente idée pour ce type de requête. Cependant, ceci semble être très gourmand en CPU dès que @Output commence à grossir. Si je SELECT * pour obtenir les 100 000 lignes que je veux dans une requête standard, les résultats reviennent immédiatement. Toutefois, si j'exécute la requête concaténée comme ci-dessus et ne sélectionne que les 10 colonnes nécessaires sur 50, la requête ne veut pas finir. J'ai annulé après 15 minutes. Je vais essayer de l'utiliser pendant plus longtemps que cela du jour au lendemain, mais cela a semblé trop long quand SELECT * revient instantanément. Merci! Toute suggestion supplémentaire serait géniale. –

+0

@SomeGuy - Oui. Je ne suis pas surpris par ça. La suggestion de Panagiotis de le faire dans SSIS me semble bonne. ou peut-être que vous pourriez faire une requête unpivot puis exportez les résultats dans un fichier texte. –

Questions connexes