Wie kann ich ein Abfrageergebnis in eine CSV-Datei in SQL Server 2008 exportieren?
Wie kann ich ein Abfrageergebnis in eine CSV-Datei in SQL Server 2008 exportieren?
Antworten:
Hier ist eine Vollbildversion dieses Bildes unten
Dadurch werden Ihre Abfrageergebnisse als durch Kommas getrennter Text angezeigt.
So speichern Sie die Ergebnisse einer Abfrage in einer Datei: Strg + Umschalt + F.
Ctrl+Shift+F
, ändert sich nur der Ausgabemodus. Die Ergebnisse werden nicht beeinflusst, wenn Sie die Abfrage bereits ausgeführt haben. Damit dies wiedergegeben wird, müssen Sie die Abfrage erneut ausführen. Wenn Sie es im Modus "Ergebnisse in Datei" ausführen, sollten Sie gefragt werden, wo Sie die Ergebnisse speichern möchten.
Ich weiß, das ist ein bisschen alt, aber hier ist ein viel einfacher Weg ...
Führen Sie Ihre Abfrage mit den Standardeinstellungen aus (legt die Ergebnisse im Rasterformat fest, wenn Ihre nicht im Rasterformat vorliegen, siehe unten)
Klicken Sie mit der rechten Maustaste auf die Rasterergebnisse und klicken Sie auf "Ergebnisse speichern unter" und speichern Sie sie.
Wenn Ihre Ergebnisse nicht im Rasterformat vorliegen, klicken Sie mit der rechten Maustaste auf die Stelle, an der Sie die Abfrage schreiben, bewegen Sie den Mauszeiger über "Ergebnisse an" und klicken Sie auf "Ergebnisse an Raster".
Beachten Sie, dass Sie die Spaltenüberschriften NICHT erfassen!
Viel Glück!
Sie können PowerShell verwenden
$AttachmentPath = "CV File location"
$QueryFmt= "Query"
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $QueryFmt | Export-CSV $AttachmentPath
Add-PSSnapin SqlServerCmdletSnapin100
und Add-PSSnapin SqlServerProviderSnapin100
.
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Install-Module -Name SqlServer
(aber ich musste diese Cmdlets nicht einrasten). Außerdem hatte ich die Befehle in einem Skript gespeichert, das erst ausgeführt wurde, nachdem ich die Ausführungsrichtlinie geändert hatte : Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
.
RemoteSigned
Ausführungsrichtlinie ausreichen wird.
Wenn die betreffende Datenbank lokal ist, ist das Folgende wahrscheinlich die robusteste Methode, um ein Abfrageergebnis in eine CSV- Datei zu exportieren (dh Ihnen die größte Kontrolle zu geben).
Nachdem ich diesen Prozess ausführlich durchlaufen hatte, fand ich Folgendes als die beste Option
PowerShell-Skript
$dbname = "**YOUR_DB_NAME_WITHOUT_STARS**"
$AttachmentPath = "c:\\export.csv"
$QueryFmt= @"
**YOUR_QUERY_WITHOUT_STARS**
"@
Invoke-Sqlcmd -ServerInstance **SERVER_NAME_WITHOUT_STARS** -Database $dbname -Query $QueryFmt | Export-CSV $AttachmentPath -NoTypeInformation
Führen Sie PowerShell als Administrator aus
& "c:\path_to_your_ps1_file.ps1"
Invoke-Sqlcmd -ServerInstance MySQLserver123 -Query $QueryFmt -querytimeout 600 | Export-CSV $AttachmentPath
Aufbauend auf der Antwort von NS habe ich ein PowerShell-Skript, das in eine CSV- Datei exportiert, wobei die Anführungszeichen um das Feld und das Komma getrennt sind und die Header-Informationen in der Datei übersprungen werden.
add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100
$qry = @"
Select
*
From
tablename
"@
Invoke-Sqlcmd -ServerInstance Server -Database DBName -Query $qry | convertto-CSV -notype | select -skip 1 > "full path and filename.csv"
Die ersten beiden Zeilen ermöglichen die Verwendung des Befehls let von Invoke-SqlCmd .
Verwenden Sie T-SQL :
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
Es gibt jedoch einige Einschränkungen:
Sie müssen den Microsoft.ACE.OLEDB.12.0-Anbieter verfügbar haben. Der Jet 4.0-Anbieter wird auch funktionieren, aber er ist uralt, also habe ich stattdessen diesen verwendet.
Die CSV-Datei muss bereits vorhanden sein. Wenn Sie HDR=YES
headers ( ) verwenden, stellen Sie sicher, dass die erste Zeile der CSV-Datei eine durch Trennzeichen getrennte Liste aller Felder ist.
Die Verwendung der nativen SQL Server Management Studio-Technik zum Exportieren in CSV (wie von @ 8 KB vorgeschlagen) funktioniert nicht, wenn Ihre Werte Kommas enthalten, da SSMS Werte nicht in doppelte Anführungszeichen setzt. Eine robustere Methode, die für mich funktioniert hat, besteht darin, die Ergebnisse einfach zu kopieren (in das Raster klicken und dann STRG-A, STRG-C) und in Excel einzufügen. Speichern Sie dann als CSV-Datei aus Excel.
Sie können QueryToDoc ( http://www.querytodoc.com ) verwenden. Sie können eine Abfrage für eine SQL-Datenbank schreiben und die Ergebnisse - nachdem Sie das Trennzeichen ausgewählt haben - nach Excel, Word, HTML oder CSV exportieren
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
SELECT Field1, Field2, Field3 FROM DatabaseName
as @Slogmeister Extraordinaire Quoted ist korrekt.
Es muss 1> Datei mit Spalten 2 vorhanden sein. 2> Office muss installiert sein
Fehler konfrontiert
Meldung 7303, Ebene 16, Status 1, Zeile 1 Das Datenquellenobjekt des OLE DB-Anbieters "Microsoft.ACE.OLEDB.12.0" für den Verbindungsserver "(null)" kann nicht initialisiert werden. "
Meldung 15281, Ebene 16, Status 1, Zeile 1 SQL Server hat den Zugriff auf STATEMENT 'OpenRowset / OpenDatasource' der Komponente 'Ad Hoc Distributed Queries' blockiert, da diese Komponente im Rahmen der Sicherheitskonfiguration für diesen Server deaktiviert ist. Ein Systemadministrator kann die Verwendung von "Ad-hoc-verteilten Abfragen" mithilfe von sp_configure aktivieren. Weitere Informationen zum Aktivieren von "Ad-hoc-verteilten Abfragen" finden Sie in den SQL Server-Onlinedokumentationen nach "Ad-hoc-verteilte Abfragen".
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 0
RECONFIGURE
GO
Wenn Sie Powershell nicht verwenden möchten, ist diese Antwort eine Variation der großartigen Antwort von 8 KB. Der einzige Unterschied besteht darin, dass Sie anstelle von CSV als Ausgabeformat Tab Delimited auswählen. Auf diese Weise werden Zellen in Excel nicht übersprungen, wenn Ihre Daten Kommas enthalten. Wenn Sie das Standardtrennzeichen von Excel auf Registerkarten festgelegt haben, können Sie einfach alle SSMS-Abfrageergebnisse (STRG-A, STRG-C) kopieren und in Excel einfügen (Sie müssen nicht als Datei speichern und in Excel importieren) ):
Jetzt können Sie Ihre Abfrage ausführen, dann STRG-A ausführen, um alle Ergebnisse auszuwählen, dann STRG-C, um sie in die Zwischenablage zu kopieren, dann zu Excel 2013 wechseln (möglicherweise auch 2007, nicht sicher) und einfügen - vorausgesetzt, Excel ist die Standardeinstellung Das Trennzeichen ist auf die Registerkarte gesetzt.
Ja, all dies ist möglich, wenn Sie direkten Zugriff auf die Server haben. Was aber, wenn Sie nur von einem Web- / Anwendungsserver aus auf den Server zugreifen können? Nun, die Situation war bei uns schon lange her und die Lösung war SQL Server Export to CSV .