
Ich führe eine einfache Abfrage in SQL Server 2005 aus und möchte sie über sqlcmd in eine Datei exportieren. Ich hatte gehofft, die Ergebnisse in einem CSV-Format ohne die Kopfzeilen und die Abfragemetadaten (wie viele Zeilen betroffen sind) zu erhalten. Für die Kopfzeilen können Sie tatsächlich -h -1 angeben, aber wie können Sie den Endtext entfernen?
Gerade habe ich
sqlcmd -S klingon -d stardb -i C:\testscript.sql -o C:\testresults.csv -h -1 -s ","
Das Skript ist einfach gehalten und hat die Melodie von
select x, y, z from agent
Leider sehen die Ergebnisse folgendermaßen aus:
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
(4 rows affected)
Ich kann in der Hilfedatei nichts finden, das mir erklärt, wie ich den letzten Teil entferne, der mir sagt, wie viele Zeilen betroffen sind.
Irgendjemand Ideen?
Antwort1
Ich denke, Sie möchten vielleicht die Option „SET NOCOUNT ON“. Ihr SQL-Skript sieht dann so aus:
set nocount on
select x, y, z from agent
set nocount off
Die Ergebnisse werden wie folgt aussehen:
24 aingles1 creablegs
25 tbails12 bull2dog12
26 jtaylor3 Leandon62606
27 forrestw1 nuke19211
Minus die Zeilenanzahl der Zeile am Ende.
Antwort2
Ich füge den folgenden Codeblock am Anfang der Abfrage selbst hinzu, um alle Nachrichten zu entfernen, wenn sqlcmd.exe zum Exportieren der Ergebnisse in CSV verwendet wird.
-- Suppress warnings and messages like (2 rows effected)
SET ANSI_WARNINGS OFF;
SET NOCOUNT ON;
-- SQLCMD.exe batch command
:setvar SQLCMDERRORLEVEL 1
-- To Reenable
--:setvar SQLCMDERRORLEVEL 0
/**********************************************************************************
** DISABLING WARNINGS AND MESSAGES
** Disable "Changed database context to 'DatabaseName'." message in the CSV file when using
** SQLCMD.exe. You'll get a syntax error when executing this query in Management
** Studio if SQLCMD Mode is not enabled [Query] --> [SQLCMD Mode].
** :setvar SQLCMDERRORLEVEL 1 is used to disable messages like (152 Rows affected).
**********************************************************************************/
Antwort3
sqlcmd -S svr -d db ... | findstr /v "rows affected"
findstr
ist in das Betriebssystem integriert und ähnelt grep. Weitere Optionen finden Sie unter findstr /?.
Um eine Spalte zu entfernen, verwenden Siecut.exe
WerkzeugSie könnten also Folgendes ausführen:
sqlcmd -S svr -d db ... | cut -c10-
Dies würde nur ab Zeichen 10 ausgeben und somit die Zeilennummern entfernen. Passen Sie die Zahl 10 entsprechend an. Sie können auch folgende Felder ausprobieren:
sqlcmd -S svr -d db ... | cut -f2-
Dadurch würden nur die Felder 2 und höher (nach rechts) ausgegeben.