web-dev-qa-db-fra.com

Sqlcmd pour générer un fichier sans ligne pointillée sous l'en-tête, sans nombre de lignes

Utilisation du script sqlcmd suivant:

sqlcmd -S . -d MyDb -E -s, -W -Q "select account,rptmonth, thename from theTable"  
> c:\dataExport.csv

J'obtiens un fichier de sortie csv contenant

acctnum, rptmonth, facilname

-------, --------, ---------
ALLE04,201406, Allendale Community for Senior Living-LTC APPL02,201406, Applewood Estates ARBO02,201406, Arbors Care Centre
ARIS01,201406, AristaCare à Cherry Hill
. . .

(139 lignes affectées)

Existe-t-il un moyen de supprimer la ligne pointillée sous les en-têtes de colonne: -------, --------, mais conservez les en-têtes de colonne?

et aussi un moyen de se débarrasser des deux lignes utilisées pour le nombre de lignes en bas?

J'essaie d'utiliser parm -h-1 mais cela s'est débarrassé des en-têtes de colonne ainsi que de la ligne pointillée.

14
Lill Lansey

Solutions:

1) Pour supprimer le nombre de lignes ("(139 lignes affectées)"), vous devez utiliser SET NOCOUNT ON déclaration. Voir ref .

2) Pour supprimer les en-têtes de colonne, vous devez utiliser -h paramètre avec valeur -1. Voir réf (section Options de formatage) .

Exemples:

C:\Users\sqlservr.exe>sqlcmd -S(local)\SQL2012 -d Test -E -h -1 -s, -W -Q "set nocount on; select * from dbo.Account" > d:\export.txt. 

ou

C:\Users\sqlservr.exe>sqlcmd -S(local)\SQL2012 -d Test -E -h -1 -s, -W -Q "set nocount on; select * from dbo.Account" -o "d:\export2.txt"
38
Bogdan Sahlean

Le gars avec la première réponse n'a pas répondu comment supprimer la ligne pointillée. Ceci est ma solution géniale.

  1. Incluez d'abord -h -1 qui supprime à la fois la ligne en pointillés et l'en-tête
  2. Ensuite, avant votre instruction select, injectez manuellement la chaîne d'en-tête dont vous avez besoin avec une instruction PRINT. Donc, dans votre cas, IMPRIMEZ 'acctnum, rptmonth, facilname' select .. * ... from ...

Désolé, j'ai 4 ans et 9 mois de retard.

8
JSkyS

Utilisez le suivant;

sqlcmd -S . -d MyDb -E -s, -h-1 -W -Q "set nocount on;select 'account','rptmonth', 'thename';select account,rptmonth, thename from theTable"  
> c:\dataExport.csv
  • supprimer l'en-tête -h-1
  • supprimer le nombre de lignes [activer nocount sur;]
  • ajouter un en-tête sélectionner [sélectionner 'compte', 'rptmonth', 'thename';]
  • ajoutez votre sélection [sélectionnez le compte, rptmonth, puis le nom dans le tableau;]
4
Waleed A.K.

Dans mon cas, a bien fonctionné comme:

type Temp.txt | findstr/v -> DestFile.txt

2

Pour supprimer le nombre de lignes: ajoutez ce qui suit à votre instruction SQL

    SET NOCOUNT ON;

Pour supprimer la ligne de tiret, essayez ce qui suit en cas d'exécution réussie:

    findstr /v /c:"---" c:\dataExport.csv > c:\finalExport.csv

J'utilise "---" car toutes mes colonnes comportent plus de 3 caractères et je n'ai jamais cette chaîne dans mes données, mais vous pouvez également utiliser "-, -" pour réduire davantage le risque ou tout délimiteur basé sur vos données à la place du ",".

1
Dan

De plus, si vous souhaitez interroger tous les enregistrements d'une table, vous pouvez coder comme

  1. ACTIVER NOCOUNT;
  2. SELECT SUBSTRING ((SELECT ',' + COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N '% table_name%' FOR XML PATH ('')), 2, 9999);
  3. SELECT * FROM% nom_table%

Attribuez les requêtes ci-dessus à une variable% query%. La commande ressemblera à celle ci-dessous.

SQLCMD -h -1 -W -E -S %sql_server% -d %sql_dabase% -Q %query% -s"," -o output_file.csv
0
Z.T. Wai

1.Créez d'abord le fichier avec les colonnes d'en-tête

2.Ajoutez la sortie sqlcmd au fichier à l'aide de l'option -h-1

echo acctnum, rptmonth, facilname> c:\dataExport.csv sqlcmd -S. -d MyDb -E -s, -h-1 -W -Q "sélectionner le compte, rptmonth, puis le nom du tableau" >> c:\dataExport.csv

0
Jim Evans