web-dev-qa-db-de.com

Tabelle aus der Datenbank in die CSV-Datei exportieren

Ich möchte Folgendes tun: Exportieren einer Tabelle aus der SQL Server-Datenbank in eine durch Kommas getrennte csv-Datei, ohne den SQL Server-Import-Export-Assistenten zu verwenden

Ich möchte es mit einer Abfrage tun, weil ich die Abfrage in der Automatisierung verwenden möchte

Ist es möglich? Ich habe danach gesucht und keine gute Antwort gefunden

62

Einige Ideen:

Aus SQL Server Management Studio

 1. Run a SELECT statement to filter your data
 2. Click on the top-left corner to select all rows
 3. Right-click to copy all the selected
 4. Paste the copied content on Microsoft Excel
 5. Save as CSV

SQLCMD verwenden (Eingabeaufforderung)

Beispiel:

Über die Eingabeaufforderung können Sie die Abfrage ausführen und in eine Datei exportieren:

sqlcmd -S . -d DatabaseName -E -s',' -W -Q "SELECT * FROM TableName" > C:\Test.csv

Weitere Informationen hier: ExcelSQLServer

Anmerkungen:

  • Bei diesem Ansatz werden die Informationen "betroffene Zeilen" am unteren Rand der Datei angezeigt. Sie können dies jedoch beseitigen, indem Sie "SET NOCOUNT ON" in der Abfrage selbst verwenden.

  • Sie können anstelle der eigentlichen Abfrage eine gespeicherte Prozedur ausführen (z. B. "EXEC Database.dbo.StoredProcedure").

  • Sie können jede Programmiersprache oder sogar eine Batchdatei verwenden, um dies zu automatisieren

Verwenden von BCP (Eingabeaufforderung)

Beispiel:

bcp "SELECT * FROM Database.dbo.Table" queryout C:\Test.csv -c -t',' -T -S .\SQLEXPRESS

Es ist wichtig, das Komma-Trennzeichen mit -t ',' vs.

Weitere Informationen hier: bcp Utility

Anmerkungen:

  • Wie bei der Verwendung von SQLCMD können Sie anstelle der eigentlichen Abfragen gespeicherte Prozeduren ausführen
  • Sie können jede Programmiersprache oder eine Batchdatei verwenden, um dies zu automatisieren

Hoffe das hilft.

123
priboyd

Sie können auch das folgende Node.js-Modul verwenden, um dies mit Leichtigkeit durchzuführen:

https://www.npmjs.com/package/mssql-to-csv

var mssqlExport = require('mssql-to-csv')

    // All config options supported by https://www.npmjs.com/package/mssql 
    var dbconfig = {
        user: 'username',
        password: 'pass',
        server: 'servername',
        database: 'dbname',
        requestTimeout: 320000,
        pool: {
            max: 20,
            min: 12,
            idleTimeoutMillis: 30000
        }
    };

    var options = {
        ignoreList: ["sysdiagrams"], // tables to ignore 
        tables: [],                  // empty to export all the tables 
        outputDirectory: 'somedir',
        log: true
    };

    mssqlExport(dbconfig, options).then(function(){
        console.log("All done successfully!");
        process.exit(0);
    }).catch(function(err){
        console.log(err.toString());
        process.exit(-1);
   });
7
adnan kamili

Hier ist eine Option ich fand zum Exportieren nach Excel (kann für CSV geändert werden, glaube ich)

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=D:\testing.xls;', 
'SELECT * FROM [SheetName$]') select * from SQLServerTable
7
Faiz

Aus SQL Server Management Studio

Klicken Sie mit der rechten Maustaste auf die Tabelle, die Sie exportieren möchten, und wählen Sie "Alle Zeilen auswählen" aus.

Klicken Sie mit der rechten Maustaste auf das Ergebnisfenster und wählen Sie "Ergebnisse speichern unter ...".

5
Giovanni S
rsubmit;
options missing=0;
ods listing close;
ods csv file='\\FILE_PATH_and_Name_of_report.csv';

proc sql;
SELECT *
FROM `YOUR_FINAL_TABLE_NAME';
quit;
ods csv close;

endrsubmit;
4
John

Ich habe ein kleines Tool geschrieben, das genau das macht. Code ist verfügbar auf Github .

So sichern Sie die Ergebnisse einer (oder mehrerer) SQL-Abfragen in eine (oder mehrere) CSV-Dateien:

Java -jar sql_dumper.jar /path/sql/files/ /path/out/ user pass jdbcString

Prost.

1
Boern

Im SQL Server Management Studio-Abfragefenster

  1. Wählen Sie Alle Ergebniswerte
  2. Klicken Sie mit der rechten Maustaste und wählen Sie "Ergebnisse speichern unter". 

 Table Content to CSV

  1. Speichern Sie als CSV-Datei
0
Jignesh Variya

Totes Pferd vielleicht, aber vor einiger Zeit versuchte ich dasselbe zu tun und stieß auf ein Skript, um ein STP zu erstellen, das versuchte, das zu tun, wonach ich suchte, aber es hatte ein paar Macken, die etwas Aufmerksamkeit erforderten. Bei dem Versuch herauszufinden, wo ich das Skript gefunden habe, um ein Update zu veröffentlichen, bin ich auf diesen Thread gestoßen und es schien mir ein guter Ort zu sein, um ihn zu teilen.

Dieses STP (wofür ich zum größten Teil kein Guthaben annehme und ich die Seite, auf der ich es gefunden habe, nicht finden kann), benötigt einen Schemanamen, einen Tabellennamen und ein Y oder N [ um Kopfzeilen ein- oder auszuschließen ] als Eingabeparameter und fragt die angegebene Tabelle ab, wobei jede Zeile im durch Kommas getrennten, zitierten csv-Format ausgegeben wird. 

Ich habe zahlreiche Korrekturen/Änderungen am ursprünglichen Skript vorgenommen, aber die Knochen davon stammen vom OP, wer auch immer das war.

Hier ist das Skript:

IF OBJECT_ID('get_csvFormat', 'P') IS NOT NULL
    DROP PROCEDURE get_csvFormat
GO

CREATE PROCEDURE get_csvFormat(@schemaname VARCHAR(20), @tablename VARCHAR(30),@header char(1))
AS
BEGIN
    IF ISNULL(@tablename, '') = ''
    BEGIN
        PRINT('NO TABLE NAME SUPPLIED, UNABLE TO CONTINUE')
        RETURN
    END
    ELSE
    BEGIN
        DECLARE @cols VARCHAR(MAX), @sqlstrs VARCHAR(MAX), @heading VARCHAR(MAX), @schemaid int

        --if no schemaname provided, default to dbo
        IF ISNULL(@schemaname, '') = ''
            SELECT @schemaname = 'dbo'

        --if no header provided, default to Y
        IF ISNULL(@header, '') = ''
            SELECT @header = 'Y'

        SELECT @schemaid = (SELECT schema_id FROM sys.schemas WHERE [name] = @schemaname)
        SELECT 
        @cols = (
            SELECT ' , CAST([', b.name + '] AS VARCHAR(50)) '  
            FROM sys.objects a 
            INNER JOIN sys.columns b ON a.object_id=b.object_id 
            WHERE a.name = @tablename AND a.schema_id = @schemaid
            FOR XML PATH('')
        ),
        @heading = (
            SELECT ',"' + b.name + '"' FROM sys.objects a 
            INNER JOIN sys.columns b ON a.object_id=b.object_id 
            WHERE a.name= @tablename AND a.schema_id = @schemaid
            FOR XML PATH('')
        )

        SET @tablename = @schemaname + '.' + @tablename
        SET @heading =  'SELECT ''' + right(@heading,len(@heading)-1) + ''' AS CSV, 0 AS Sort'  + CHAR(13)
        SET @cols =  '''"'',' + replace(right(@cols,len(@cols)-1),',', ',''","'',') + ',''"''' + CHAR(13)

        IF @header = 'Y'
            SET @sqlstrs =  'SELECT CSV FROM (' + CHAR(13) + @heading + ' UNION SELECT CONCAT(' + @cols + ') CSV, 1 AS Sort FROM ' + @tablename + CHAR(13) + ') X ORDER BY Sort, CSV ASC'
        ELSE
            SET @sqlstrs =  'SELECT CONCAT(' + @cols + ') CSV FROM ' + @tablename 

        IF @schemaid IS NOT NULL 
            EXEC(@sqlstrs)
        ELSE 
            PRINT('SCHEMA DOES NOT EXIST')
    END
END

GO

--------------------------------------

--EXEC get_csvFormat @schemaname='dbo', @tablename='TradeUnion', @header='Y'
0
svenGUTT