web-dev-qa-db-fra.com

Exporter la table de la base de données vers le fichier csv

Je souhaite: Exporter la table de la base de données SQL Server vers un fichier csv délimité par des virgules sans utiliser l'assistant d'importation de SQL Server Export

Je veux le faire en utilisant une requête parce que je veux utiliser la requête en automatisation

C'est possible? J'ai cherché cela et je n'ai pas trouvé de bonne réponse

62
Abdalwhab Bakheet

Quelques idées:

De 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

Utilisation de SQLCMD (invite de commande)

Exemple:

A partir de la commande Invite, vous pouvez exécuter la requête et l'exporter dans un fichier:

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

Plus d'informations ici: ExcelSQLServer

Remarques:

  • Cette approche aura les informations "Lignes affectées" au bas du fichier, mais vous pouvez vous en débarrasser en utilisant "SET NOCOUNT ON" dans la requête elle-même.

  • Vous pouvez exécuter une procédure stockée à la place de la requête réelle (par exemple, "EXEC Database.dbo.StoredProcedure").

  • Vous pouvez utiliser n’importe quel langage de programmation ou même un fichier de commandes pour automatiser cette opération.

Utilisation de BCP (Invite de commande)

Exemple:

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

Il est important de citer le séparateur de virgule sous la forme -t ',' vs just -t,

Plus d'informations ici: Utilitaire bcp

Remarques:

  • Selon l'utilisation de SQLCMD, vous pouvez exécuter des procédures stockées à la place des requêtes réelles.
  • Vous pouvez utiliser n’importe quel langage de programmation ou un fichier de commandes pour automatiser cette opération.

J'espère que cela t'aides.

123
priboyd

Vous pouvez également utiliser le module Node.js suivant pour le faire facilement:

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

Voici une option j'ai trouvé à exporter vers Excel (peut être modifié pour CSV je crois)

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

De SQL Server Management Studio

Faites un clic droit sur la table que vous voulez exporter et sélectionnez "Sélectionner toutes les lignes"

Faites un clic droit sur la fenêtre de résultats et sélectionnez "Enregistrer les résultats sous ..."

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

J'ai écrit un petit outil qui fait justement cela. Le code est disponible sur github .

Pour transférer les résultats d'une (ou plusieurs) requête SQL dans un (ou plusieurs) fichier CSV:

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

À votre santé.

1
Boern

Dans la fenêtre de requête SQL Server Management Studio

  1. Sélectionner toutes les valeurs d'ensemble de résultats
  2. Clic droit et sélectionnez "Enregistrer les résultats sous" 

 Table Content to CSV

  1. Enregistrer en tant que fichier CSV
0
Jignesh Variya

Cheval mort peut-être, mais il y a quelque temps, j'essayais de faire la même chose et je suis tombé sur un script pour créer un STP qui essayait de faire ce que je cherchais, mais il y avait quelques bizarreries qui nécessitaient un peu d'attention. Dans une tentative de localiser le script pour publier une mise à jour, je suis tombé sur ce fil et cela semblait être un bon endroit pour le partager.

This STP (pour lequel je ne prends généralement aucun crédit et je ne trouve pas le site sur lequel je l'ai trouvé) prend un nom de schéma, un nom de table et Y ou N [pour inclure ou exclure des en-têtes. ] en tant que paramètres d'entrée et interroge la table fournie, en générant chaque ligne au format csv séparé par des virgules. 

J'ai apporté de nombreux correctifs/modifications au script d'origine, mais ses os proviennent de l'OP, quel qu'il soit.

Voici le script:

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