Gibt es eine Möglichkeit, sqlcmd auszuführen, um eine Abfrageausgabe zu erhalten, ohne die Anzahl der betroffenen Zeilen anzuzeigen?

Gibt es eine Möglichkeit, sqlcmd auszuführen, um eine Abfrageausgabe zu erhalten, ohne die Anzahl der betroffenen Zeilen anzuzeigen?

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"

findstrist in das Betriebssystem integriert und ähnelt grep. Weitere Optionen finden Sie unter findstr /?.

Um eine Spalte zu entfernen, verwenden Siecut.exeWerkzeugSie 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.

verwandte Informationen