Wie exportiere ich Daten im SQL-Format von SQL Server mit sqlcmd?

136

Ich kann ganz einfach Daten in eine Textdatei wie:

sqlcmd -S myServer -d myDB -E -Q "select col1, col2, col3 from SomeTable" 
     -o "MyData.txt"

Ich habe mir jedoch die Hilfedateien angesehen, SQLCMDaber keine Option speziell für CSV gesehen.

Gibt es eine Möglichkeit, Daten aus einer Tabelle mit in eine CSV-Textdatei zu kopieren SQLCMD?

Strahl
quelle
Muss dies über sqlcmd erfolgen, oder können Sie ein anderes Programm wie das folgende verwenden: codeproject.com/KB/aspnet/ImportExportCSV.aspx
Bernhard Hofmann
Es muss nicht sein, aber ich wollte sicher wissen, ob sqlcmd dies tatsächlich kann oder nicht, bevor ich in ein anderes Exportdienstprogramm eintauche. Eine Sache zu erwähnen ist, dass es skriptfähig sein muss.
Ray
Es gibt ein SSMS 2008-Add-In-Tool, das CSV-Ausgaben aus Ihren Tabellen ausführt, die durch where- und order by-Klauseln angepasst werden können. store.nmally.com/software/sql-server-management-studio-addons/…

Antworten:

140

Sie können so etwas ausführen:

sqlcmd -S MyServer -d myDB -E -Q "select col1, col2, col3 from SomeTable" 
       -o "MyData.csv" -h-1 -s"," -w 700
  • -h-1 Entfernt Spaltennamenüberschriften aus dem Ergebnis
  • -s"," setzt den Säulentrenner auf,
  • -w 700 Legt die Zeilenbreite auf 700 Zeichen fest (diese muss so breit sein wie die längste Zeile, sonst wird in die nächste Zeile umgebrochen).
Scottm
quelle
22
Die Einschränkung bei dieser Vorgehensweise besteht darin, dass Ihre Daten möglicherweise keine Kommas enthalten.
Sarel Botha
1
@SarelBotha, Sie können dieses Problem umgehen, '""' + col1 + '""' AS col1in (doppelte) doppelte Anführungszeichen setzen oder einfach eine gespeicherte Prozedur aufrufen.
MisterIsaak
2
@JIsaak Stellen Sie dann sicher, dass Ihre Daten keine doppelten Anführungszeichen enthalten, oder ersetzen Sie Ihre doppelten Anführungszeichen durch zwei doppelte Anführungszeichen.
Sarel Botha
1
Könnte jemand klarstellen, was zu tun ist, um Kommas in den Daten zuzulassen? Müssen wir jede Spalte mit '""' + ___ + '""' umgeben?
Ahmed
2
Diese Antwort ist jetzt veraltet. PowerShell-Skripts sind flexibler und können in SQL Server als Job Agent ausgeführt werden.
Clinton Ward
75

Mit PowerShell können Sie das Problem sauber lösen, indem Sie Invoke-Sqlcmd in Export-Csv leiten.

#Requires -Module SqlServer
Invoke-Sqlcmd -Query "SELECT * FROM DimDate;" `
              -Database AdventureWorksDW2012 `
              -Server localhost |
Export-Csv -NoTypeInformation `
           -Path "DimDate.csv" `
           -Encoding UTF8

SQL Server 2016 enthält das SqlServer- Modul, das das Invoke-SqlcmdCmdlet enthält , das Sie auch dann haben, wenn Sie nur SSMS 2016 installieren. Zuvor enthielt SQL Server 2012 das alte SQLPS- Modul , das das aktuelle Verzeichnis in SQLSERVER:\den Stand des Moduls ändern würde zuerst verwendet (unter anderen Fehlern), daher müssen Sie die #Requiresobige Zeile ändern in:

Push-Location $PWD
Import-Module -Name SQLPS
# dummy query to catch initial surprise directory change
Invoke-Sqlcmd -Query "SELECT 1" `
              -Database  AdventureWorksDW2012 `
              -Server localhost |Out-Null
Pop-Location
# actual Invoke-Sqlcmd |Export-Csv pipeline

Um das Beispiel für SQL Server 2008 und 2008 R2 anzupassen, entfernen Sie die #RequiresZeile vollständig und verwenden Sie das Dienstprogramm sqlps.exe anstelle des Standard-PowerShell-Hosts.

Invoke-Sqlcmd ist das PowerShell-Äquivalent von sqlcmd.exe. Anstelle von Text werden System.Data.DataRow- Objekte ausgegeben .

Der -QueryParameter funktioniert wie der -QParameter von sqlcmd.exe. Übergeben Sie eine SQL-Abfrage, die die Daten beschreibt, die Sie exportieren möchten.

Der -DatabaseParameter funktioniert wie der -dParameter von sqlcmd.exe. Übergeben Sie ihm den Namen der Datenbank, die die zu exportierenden Daten enthält.

Der -ServerParameter funktioniert wie der -SParameter von sqlcmd.exe. Übergeben Sie ihm den Namen des Servers, der die zu exportierenden Daten enthält.

Export-CSV ist ein PowerShell-Cmdlet, das generische Objekte in CSV serialisiert. Es wird mit PowerShell geliefert.

Der -NoTypeInformationParameter unterdrückt zusätzliche Ausgaben, die nicht Teil des CSV-Formats sind. Standardmäßig schreibt das Cmdlet einen Header mit Typinformationen. Es informiert Sie über den Typ des Objekts, wenn Sie es später mit deserialisieren Import-Csv, verwirrt jedoch Tools, die eine Standard-CSV erwarten.

Der -PathParameter funktioniert wie der -oParameter von sqlcmd.exe. Ein vollständiger Pfad für diesen Wert ist am sichersten, wenn Sie das alte SQLPS- Modul nicht mehr verwenden können.

Der -EncodingParameter funktioniert wie die Parameter -foder -uvon sqlcmd.exe. Standardmäßig gibt Export-Csv nur ASCII-Zeichen aus und ersetzt alle anderen durch Fragezeichen. Verwenden Sie stattdessen UTF8, um alle Zeichen beizubehalten und mit den meisten anderen Tools kompatibel zu bleiben.

Der Hauptvorteil dieser Lösung gegenüber sqlcmd.exe oder bcp.exe besteht darin, dass Sie den Befehl nicht hacken müssen, um eine gültige CSV auszugeben. Das Cmdlet Export-Csv erledigt alles für Sie.

Der Hauptnachteil besteht darin, dass Invoke-Sqlcmddie gesamte Ergebnismenge gelesen wird, bevor sie entlang der Pipeline geleitet wird. Stellen Sie sicher, dass Sie über genügend Speicher für die gesamte Ergebnismenge verfügen, die Sie exportieren möchten.

Es funktioniert möglicherweise nicht reibungslos für Milliarden von Zeilen. Wenn das ein Problem ist, können Sie die anderen Tools versuchen oder eine eigene effiziente Version rollen von Invoke-Sqlcmdmit System.Data.SqlClient.SqlDataReader Klasse.

Iain Samuel McLean Elder
quelle
5
Andere Antworten sind ehrlich gesagt scheiße, das ist der einzige Weg, es richtig zu machen. Ich wünschte, es wäre offensichtlicher.
Shagglez
1
Unter SQL 2008 R2 musste ich das Tool "sqlps.exe" ausführen, um Invoke-Sqlcmd zu verwenden. Anscheinend brauche ich SQL 2012, um das Import-Modul zu verwenden? Auf jeden Fall funktioniert es in "sqlps.exe" - siehe diesen Thread für Details .
Mister_Tom
1
@Mister_Tom guter Punkt. Das SQLPS-Modul wurde mit SQL 2012 eingeführt. In der Antwort wird nun erläutert, wie das Beispiel für ältere Editionen angepasst wird.
Iain Samuel McLean Elder
1
@JasonMatney PowerShell ist die neue Verwaltungsoberfläche für Windows-Systeme, aber viele SQL Server-Ratschläge wurden veröffentlicht, bevor sie zum Standard wurden. Verbreite das Wort! :-)
Iain Samuel McLean Elder
1
Diese Antwort bietet nützliche Informationen und eine leistungsstarke und flexible ALTERNATIVE Methode zur Behandlung des Problems. Die ursprüngliche Frage wird jedoch nicht vollständig beantwortet , da sie speziell gestellt wurde. Ich bin auch ein Powershell-Fan, aber lassen wir Evangelisation nicht zu Hysterie werden. SQLCMD wird nicht so schnell verschwinden.
Barbecue
69
sqlcmd -S myServer -d myDB -E -o "MyData.txt" ^
    -Q "select bar from foo" ^
    -W -w 999 -s","

Die letzte Zeile enthält CSV-spezifische Optionen.

  • -W   Entfernen Sie nachgestellte Leerzeichen aus jedem einzelnen Feld
  • -s","   setzt den Spaltenseparator auf das Komma (,)
  • -w 999   Legt die Zeilenbreite auf 999 Zeichen fest

Die Antwort von scottm kommt meiner Verwendung sehr nahe, aber ich finde -W, dass dies eine wirklich schöne Ergänzung ist: Ich muss keine Leerzeichen kürzen, wenn ich die CSV an anderer Stelle verwende.

Siehe auch die MSDN sqlcmd-Referenz . Es /?beschämt die Ausgabe der Option.

ESV
quelle
19
@sims "set nocount on" am Anfang der Abfrage / Eingabedatei
d -_- b
7
Wie kann ich Unterstreichungen in den Kopfzeilen entfernen?
Ntombela
@gugulethun: Sie können in Ihrer Abfrage eine Vereinigung durchführen, um den Spaltennamen in die erste Zeile zu setzen.
Nordes
2
Dies funktioniert wie ein Zauber, aber wenn Ihre Spalte den Separator enthält, bekomme ich eine beschädigte CSV-Datei ...
Peter
Dieser Kommentar wurde auch zur akzeptierten Antwort hinzugefügt, aber ... Sie können dieses Problem '""' + col1 + '""' AS col1umgehen, in (doppelte) doppelte Anführungszeichen setzen oder einfach eine gespeicherte Prozedur aufrufen.
MisterIsaak
59

Ist das nicht bcpgedacht?

bcp "select col1, col2, col3 from database.schema.SomeTable" queryout  "c:\MyData.txt"  -c -t"," -r"\n" -S ServerName -T

Führen Sie dies über Ihre Befehlszeile aus, um die Syntax zu überprüfen.

bcp /?

Beispielsweise:

usage: bcp {dbtable | query} {in | out | queryout | format} datafile
  [-m maxerrors]            [-f formatfile]          [-e errfile]
  [-F firstrow]             [-L lastrow]             [-b batchsize]
  [-n native type]          [-c character type]      [-w wide character type]
  [-N keep non-text native] [-V file format version] [-q quoted identifier]
  [-C code page specifier]  [-t field terminator]    [-r row terminator]
  [-i inputfile]            [-o outfile]             [-a packetsize]
  [-S server name]          [-U username]            [-P password]
  [-T trusted connection]   [-v version]             [-R regional enable]
  [-k keep null values]     [-E keep identity values]
  [-h "load hints"]         [-x generate xml format file]
  [-d database name]

Bitte beachten Sie, dass bcpkeine Spaltenüberschriften ausgegeben werden können.

Siehe: bcp Utility- Dokumentenseite.

Beispiel von der obigen Seite:

bcp.exe MyTable out "D:\data.csv" -T -c -C 65001 -t , ...
Johndacostaa
quelle
1
Servername = Ihr Computername \ SQLServername, nur dann führt es einen anderen Fehler aus
Hammad Khan
1
Falls Sie die vollständige Dokumentation für bcp.exe sehen möchten: technet.microsoft.com/en-us/library/ms162802.aspx
Robert Bernstein
5
Was tun Sie, wenn Sie die Spaltennamen auch als Überschrift exportieren müssen? Gibt es eine einfache generische Lösung mit bcp?
Iain Samuel McLean Elder
@ Johndacosta vielen Dank. Wie würden Sie auch die Spaltenüberschriften drucken? Ich sehe nirgendwo einen einfachen Wechsel dazu. Vielen Dank!
Rachael
1
bcpenthält keinen Header (Spaltennamen), ist aber ~ 10X schneller als sqlcmd(meiner Erfahrung nach). Für wirklich große Datenmengen können Sie bcpdie Daten abrufen und mit sqlcmd(wählen Sie oben 0 * aus ...) den Header abrufen und dann kombinieren.
YJZ
12

Ein Hinweis für alle, die dies tun möchten, aber auch die Spaltenüberschriften haben. Dies ist die Lösung, für die ich eine Batch-Datei verwendet habe:

sqlcmd -S servername -U username -P password -d database -Q "set nocount on; set ansi_warnings off; sql query here;" -o output.tmp -s "," -W
type output.tmp | findstr /V \-\,\- > output.csv
del output.tmp

Dadurch werden die ersten Ergebnisse (einschließlich der Trennzeichen ----, ---- zwischen den Headern und den Daten) in eine temporäre Datei ausgegeben und diese Zeile durch Herausfiltern über findstr entfernt. Beachten Sie, dass es nicht perfekt ist, da es herausfiltert -,-- es funktioniert nicht, wenn nur eine Spalte in der Ausgabe enthalten ist, und es filtert auch legitime Zeilen heraus, die diese Zeichenfolge enthalten.

Rudismus
quelle
1
Verwenden Sie stattdessen den folgenden Filter: findstr / r / v ^ \ - [, \ -] * $> output.csv Aus irgendeinem Grund entspricht simle ^ [, \ -] * $ allen Zeilen.
Vladimir Korolev
3
Setzen Sie immer einen regulären Ausdruck mit ^ in doppelte Anführungszeichen, sonst erhalten Sie seltsame Ergebnisse, da ^ ein Escape-Zeichen für cmd.exe ist. Beide obigen regulären Ausdrücke funktionieren nicht richtig, soweit ich das beurteilen kann, aber dies funktioniert: findstr / r / v "^ - [-,] * -. $" (Das. Vor dem $ scheint beim Testen mit benötigt zu werden Echo, aber möglicherweise nicht für sqlcmd Ausgabe)
JimG
Es gibt auch ein Problem mit Datumsangaben mit zwei Leerzeichen zwischen Datum und Uhrzeit anstelle von einem. Wenn Sie versuchen, die CSV in Excel zu öffnen, wird sie als 00: 00.0 angezeigt. Eine einfache Möglichkeit, dies zu beheben, besteht darin, alle "" durch "" vor Ort mithilfe von SED zu suchen und zu ersetzen. Der Befehl zum Hinzufügen zu Ihrem Skript lautet: SED -i "s / / / g" output.csv. Mehr über SED gnuwin32.sourceforge.net/packages/sed.htm
PollusB
Dies ist die richtige Antwort und funktioniert perfekt mit der Hinzufügung von @ JimG. Ich habe ein Semikolon für das Trennzeichen und eine SQL-Datei für die Eingabe verwendet. Die Datei enthielt den Teil "Nicht zählen an" und "ansi_warning aus" und den Schalter "-W" zum Entfernen von Speicherplatz
robotik
1

Diese Antwort baut auf der Lösung von @ iain-Elder auf, die bis auf den Fall einer großen Datenbank (wie in seiner Lösung ausgeführt) gut funktioniert. Die gesamte Tabelle muss in den Speicher Ihres Systems passen, und für mich war dies keine Option. Ich vermute, dass die beste Lösung den System.Data.SqlClient.SqlDataReader und einen benutzerdefinierten CSV-Serializer ( siehe hier für ein Beispiel ) oder eine andere Sprache mit einem MS SQL-Treiber und einer CSV-Serialisierung verwenden würde. Im Geiste der ursprünglichen Frage, die wahrscheinlich nach einer Lösung ohne Abhängigkeit suchte, funktionierte der folgende PowerShell-Code für mich. Es ist sehr langsam und ineffizient, insbesondere beim Instanziieren des $ data-Arrays und beim Aufrufen von Export-Csv im Append-Modus für jede $ chunk_size-Zeile.

$chunk_size = 10000
$command = New-Object System.Data.SqlClient.SqlCommand
$command.CommandText = "SELECT * FROM <TABLENAME>"
$command.Connection = $connection
$connection.open()
$reader = $command.ExecuteReader()

$read = $TRUE
while($read){
    $counter=0
    $DataTable = New-Object System.Data.DataTable
    $first=$TRUE;
    try {
        while($read = $reader.Read()){

            $count = $reader.FieldCount
            if ($first){
                for($i=0; $i -lt $count; $i++){
                    $col = New-Object System.Data.DataColumn $reader.GetName($i)
                    $DataTable.Columns.Add($col)
                }
                $first=$FALSE;
            }

            # Better way to do this?
            $data=@()
            $emptyObj = New-Object System.Object
            for($i=1; $i -le $count; $i++){
                $data +=  $emptyObj
            }

            $reader.GetValues($data) | out-null
            $DataRow = $DataTable.NewRow()
            $DataRow.ItemArray = $data
            $DataTable.Rows.Add($DataRow)
            $counter += 1
            if ($counter -eq $chunk_size){
                break
            }
        }
        $DataTable | Export-Csv "output.csv" -NoTypeInformation -Append
    }catch{
        $ErrorMessage = $_.Exception.Message
        Write-Output $ErrorMessage
        $read=$FALSE
        $connection.Close()
        exit
    }
}
$connection.close()
jeffmax
quelle
1

Alternative Option mit BCP:

exec master..xp_cmdshell 'BCP "sp_who" QUERYOUT C:\av\sp_who.txt -S MC0XENTC -T -c '
Arnav
quelle
1

Wird normalerweise sqlcmdmit einem bcpDienstprogramm (als Teil von mssql-tools) geliefert, das standardmäßig in CSV exportiert wird.

Verwendung:

bcp {dbtable | query} {in | out | queryout | format} datafile

Beispielsweise:

bcp.exe MyTable out data.csv

Um alle Tabellen in entsprechende CSV-Dateien zu speichern, finden Sie hier das Bash- Skript:

#!/usr/bin/env bash
# Script to dump all tables from SQL Server into CSV files via bcp.
# @file: bcp-dump.sh
server="sql.example.com" # Change this.
user="USER" # Change this.
pass="PASS" # Change this.
dbname="DBNAME" # Change this.
creds="-S '$server' -U '$user' -P '$pass' -d '$dbname'"
sqlcmd $creds -Q 'SELECT * FROM sysobjects sobjects' > objects.lst
sqlcmd $creds -Q 'SELECT * FROM information_schema.routines' > routines.lst
sqlcmd $creds -Q 'sp_tables' | tail -n +3 | head -n -2 > sp_tables.lst
sqlcmd $creds -Q 'SELECT name FROM sysobjects sobjects WHERE xtype = "U"' | tail -n +3 | head -n -2 > tables.lst

for table in $(<tables.lst); do
  sqlcmd $creds -Q "exec sp_columns $table" > $table.desc && \
  bcp $table out $table.csv -S $server -U $user -P $pass -d $dbname -c
done
Kenorb
quelle
0

Eine Antwort oben hat es für mich fast gelöst, aber es erstellt keine richtig analysierte CSV.

Hier ist meine Version:

sqlcmd -S myurl.com -d MyAzureDB -E -s, -W -i mytsql.sql | findstr /V /C:"-" /B > parsed_correctly.csv

Jemand, der sagt, dass dies sqlcmdzugunsten einer PowerShell-Alternative veraltet ist, vergisst, dass dies sqlcmdnicht nur für Windows gilt. Ich bin unter Linux (und unter Windows vermeide ich PS sowieso).

Trotzdem finde ich es bcpeinfacher.

Hack-R
quelle
0

Aus folgenden zwei Gründen sollten Sie meine Lösung in CMD ausführen:

  1. Die Abfrage enthält möglicherweise doppelte Anführungszeichen
  2. Der Anmeldename und das Kennwort sind manchmal erforderlich, um eine Remote-SQL Server-Instanz abzufragen

    sqlcmd -U [your_User]  -P[your_password] -S [your_remote_Server] -d [your_databasename]  -i "query.txt" -o "output.csv" -s"," -w 700
Mohsen Abasi
quelle
-2

Sie können es auf hackige Weise tun. Vorsichtig mit dem sqlcmdHack. Wenn die Daten doppelte Anführungszeichen oder Kommas enthalten, treten Probleme auf.

Sie können ein einfaches Skript verwenden, um es richtig zu machen:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Data Exporter                                                 '
'                                                               '
' Description: Allows the output of data to CSV file from a SQL '
'       statement to either Oracle, SQL Server, or MySQL        '
' Author: C. Peter Chen, http://dev-notes.com                   '
' Version Tracker:                                              '
'       1.0   20080414 Original version                         '
'   1.1   20080807 Added email functionality                '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
option explicit
dim dbType, dbHost, dbName, dbUser, dbPass, outputFile, email, subj, body, smtp, smtpPort, sqlstr

'''''''''''''''''
' Configuration '
'''''''''''''''''
dbType = "oracle"                 ' Valid values: "oracle", "sqlserver", "mysql"
dbHost = "dbhost"                 ' Hostname of the database server
dbName = "dbname"                 ' Name of the database/SID
dbUser = "username"               ' Name of the user
dbPass = "password"               ' Password of the above-named user
outputFile = "c:\output.csv"      ' Path and file name of the output CSV file
email = "[email protected]"           ' Enter email here should you wish to email the CSV file (as attachment); if no email, leave it as empty string ""
  subj = "Email Subject"          ' The subject of your email; required only if you send the CSV over email
  body = "Put a message here!"    ' The body of your email; required only if you send the CSV over email
  smtp = "mail.server.com"        ' Name of your SMTP server; required only if you send the CSV over email
  smtpPort = 25                   ' SMTP port used by your server, usually 25; required only if you send the CSV over email
sqlStr = "select user from dual"  ' SQL statement you wish to execute
'''''''''''''''''''''
' End Configuration '
'''''''''''''''''''''



dim fso, conn

'Create filesystem object 
set fso = CreateObject("Scripting.FileSystemObject")

'Database connection info
set Conn = CreateObject("ADODB.connection")
Conn.ConnectionTimeout = 30
Conn.CommandTimeout = 30
if dbType = "oracle" then
    conn.open("Provider=MSDAORA.1;User ID=" & dbUser & ";Password=" & dbPass & ";Data Source=" & dbName & ";Persist Security Info=False")
elseif dbType = "sqlserver" then
    conn.open("Driver={SQL Server};Server=" & dbHost & ";Database=" & dbName & ";Uid=" & dbUser & ";Pwd=" & dbPass & ";")
elseif dbType = "mysql" then
    conn.open("DRIVER={MySQL ODBC 3.51 Driver}; SERVER=" & dbHost & ";PORT=3306;DATABASE=" & dbName & "; UID=" & dbUser & "; PASSWORD=" & dbPass & "; OPTION=3")
end if

' Subprocedure to generate data.  Two parameters:
'   1. fPath=where to create the file
'   2. sqlstr=the database query
sub MakeDataFile(fPath, sqlstr)
    dim a, showList, intcount
    set a = fso.createtextfile(fPath)

    set showList = conn.execute(sqlstr)
    for intcount = 0 to showList.fields.count -1
        if intcount <> showList.fields.count-1 then
            a.write """" & showList.fields(intcount).name & ""","
        else
            a.write """" & showList.fields(intcount).name & """"
        end if
    next
    a.writeline ""

    do while not showList.eof
        for intcount = 0 to showList.fields.count - 1
            if intcount <> showList.fields.count - 1 then
                a.write """" & showList.fields(intcount).value & ""","
            else
                a.write """" & showList.fields(intcount).value & """"
            end if
        next
        a.writeline ""
        showList.movenext
    loop
    showList.close
    set showList = nothing

    set a = nothing
end sub

' Call the subprocedure
call MakeDataFile(outputFile,sqlstr)

' Close
set fso = nothing
conn.close
set conn = nothing

if email <> "" then
    dim objMessage
    Set objMessage = CreateObject("CDO.Message")
    objMessage.Subject = "Test Email from vbs"
    objMessage.From = email
    objMessage.To = email
    objMessage.TextBody = "Please see attached file."
    objMessage.AddAttachment outputFile

    objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = smtp
    objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = smtpPort

objMessage.Configuration.Fields.Update

    objMessage.Send
end if

'You're all done!!  Enjoy the file created.
msgbox("Data Writer Done!")

Quelle: Schreiben der SQL-Ausgabe in CSV mit VBScript .

Sarel Botha
quelle
1
Eine Erklärung für die Ablehnung wäre schön. Meine Antwort ist richtig: Sie können dies nicht mit sqlcmd tun. Ich habe auch einen alternativen Weg angeboten, um die Aufgabe zu erfüllen.
Sarel Botha
4
Die Abwertung ist, weil Sie mit sqlcmd eindeutig das tun können, was OP verlangt.
Brian Driscoll
2
@BrianDriscoll, Er hat nicht gesagt, dass man es nicht machen kann sqlcmd, wir haben nur die Tatsache angegeben, dass sqlcmddas Komma nicht richtig entweicht und daher für ernsthafte CSV-Ausgaben kaum verwendbar ist .
Sebastian
Ich habe das gesagt, aber die Abstimmungen satt, also habe ich meine Antwort bearbeitet. Ich werde meine Bearbeitung wahrheitsgemäßer gestalten.
Sarel Botha