Enregistrer les résultats au format CSV * avec des en-têtes * dans SSMS

13

Avec SQL Server 2008 R2, lorsque j'enregistre les résultats au format CSV, il n'y a pas d'en-tête. Je peux contourner ce problème en copiant et collant avec le "Copier avec en-têtes", ou simplement saisir les en-têtes et les coller dans le CSV, etc., mais y a-t-il une meilleure façon de le faire?

Kyle Brandt
la source
En fait, un sp qui fait cela pourrait être idéal.
Kyle Brandt
Copiez avec des en-têtes puis collez-les dans Excel!

Réponses:

22

Dans SSMS, vous devez modifier certaines options:

Outils - Options - Résultats de la requête - Serveur SQL - Résultats dans la grille (ou texte) -> Inclure les en-têtes de colonne lors de la copie ou de l'enregistrement des résultats .

Les paramètres modifiés sont appliqués aux fenêtres de requête nouvelles, mais pas existantes.

Marian
la source
10

Je vois que vous avez clairement déclaré que vous recherchez une solution dans SSMS mais je pensais que je fournirais une solution PowerShell au cas où cela aiderait (SQLPS est accessible depuis l'intérieur de SSMS 2008 et 2008 R2).

Vous pouvez utiliser SQLPS (ou PowerShell standard avec le composant logiciel enfichable d'applet de commande SQL) pour exécuter quelque chose comme ceci:

Invoke-Sqlcmd -Query "sp_databases" -ServerInstance "LocalHost\R2" |
Export-Csv -Path "C:\temp\MyDatabaseSizes.csv" -NoTypeInformation

Je peux continuer avec cet exemple si vous êtes intéressé.

Aaron Nelson - SQLvariant
la source
3

Si vous aimez l'approche de script PowerShell, j'ai un script qui exporte vers CSV depuis SSMS via PowerShell . Je l'aime dans la mesure où vous pouvez avoir un script SQL dynamique, diable vous pouvez sélectionner le texte et SSMS le passer au script comme argument.

Le seul inconvénient est que je n'ai pas trouvé de moyen intelligent de transmettre la connexion de la fenêtre actuelle. Ma solution de contournement actuelle consiste à configurer différents outils qui ne varient que dans leurs chaînes de connexion, à savoir PROD_DW, PROD_DB, TEST_DW ...

billinkc
la source
1

Vous pouvez faire une union all join pour ajouter explicitement des en-têtes de colonne en une seule ligne, sélectionnez l'union avec les vraies lignes, par exemple:

SELECT 'col1' AS col1... 
UNION ALL 
SELECT T.col1... 
FROM TABLE T

La plus grande difficulté avec cette approche est la conversion forcée en type de données de caractères dans la seconde sélection.

Phillip Senn
la source
-1

SSMS n'est pas un outil d'exportation de données. Utilisez l'assistant d'importation / exportation ou BCP, tous deux conçus comme des outils d'exportation de données et feront ce que vous cherchez à faire.

mrdenny
la source
Si cela était strictement vrai, il ne devrait avoir aucune option d'exportation du tout. Pour tout logiciel, si vous ajoutez une fonctionnalité, faites-la fonctionner correctement. Au moins SSMS 2008R2 échoue à ce test lorsqu'il s'agit d'exporter. De plus, SSMS peut réellement répondre aux besoins du PO.
Eric
2
SSMS est un outil d'exportation de données ad hoc. Si vous avez besoin d'un extrait unique de données dans, par exemple, Excel, SSMS est l'outil le plus rapide et le plus simple. Dans le temps nécessaire au démarrage de l'assistant d'exportation, vous pouvez exécuter la requête et enregistrer les résultats.
Greenstone Walker