web-dev-qa-db-fra.com

Comment enregistrer le résultat d'une requête SQL dans un fichier XML sur le disque

Je souhaite exporter la table de SQL Server 2012 vers un fichier XML. J'ai trouvé Nice answer et ici comment faire un résultat XML à partir d'une requête de base de données SQL Server, mais je ne sais toujours pas comment enregistrer ce résultat physiquement dans un fichier.

La requête SQL est:

SELECT [Created], [Text]
FROM [db304].[dbo].[SearchHistory]
FOR XML PATH('Record'), ROOT('SearchHistory')

J'utilise Microsoft SQL Server Management Studio pour exécuter ce résultat. Je vois le XML dans une fenêtre de résultats, mais je ne peux pas l'enregistrer.

Il y a "Enregistrer le résultat sous .." dans le menu contextuel, mais avec 98900 lignes, je manque de mémoire de 8 Go avec cette option.

Existe-t-il un moyen d'enregistrer cette requête directement dans le fichier XML sur le disque?

11
Tomas Kubes

Vous pouvez également exporter les procédures stockées étendues de votre serveur SQL vers un fichier xml.

Mais vous devrez configurer le serveur SQL avant de pouvoir l'utiliser.

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE
EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE

Une fois que xp_cmdshel est activé dans SQL Server. Vous pouvez utiliser la commande suivante pour exporter les données vers un fichier xml.

EXEC xp_cmdshell 'bcp "SELECT [Created], [Text] FROM [db304].[dbo].[SearchHistory] FOR XML PATH(''Record''), ROOT(''SearchHistory'')" queryout "C:\bcptest.xml" -T -c -t,'
10
M.Ali

Vous pouvez toujours utiliser l'option "Résultats vers fichier" dans SSMS:

enter image description here

Cela devrait produire les résultats de l'exécution de la requête directement dans un fichier sur le disque

5
marc_s

Pour ce travail dans SQL Server 2012 est une douleur dans le cul. Enfin, je finis par le mettre à jour vers SQL Server 2014 car il existe déjà un support pour les fichiers SQL UTF-8 dans sqlcmd.

  1. Créez une requête SQL et enregistrez-la dans le fichier.
  2. exécuter suivant:

    sqlcmd -S -U sa -P sapassword -i nom_fichier_entrée_C65001 -o nom_fichier_sortie

1
Tomas Kubes