web-dev-qa-db-fra.com

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

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?

13
Kyle Brandt

Dans SSMS, vous devez modifier certaines options:

Tools - Options - Query results - sql server - results to grid (or text) -> Inclure les en-têtes de colonne lors de la copie ou de la sauvegarde des résultats.

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

22
Marian

Je vois que vous clairement avez déclaré que vous cherchez une solution dans SSMS mais j'ai pensé que je fournirais une solution PowerShell au cas où cela aiderait (SQLPS est accessible depuis l'intérieur de SSMS 2008 & 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é.

10

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 ...

3
billinkc

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 le transtypage forcé vers le type de données de caractère dans la seconde sélection.

1
Phillip Senn