Подтвердить что ты не робот

Экспорт таблицы из базы данных в файл csv

Я хочу: Экспорт таблицы из базы данных sql-сервера в файл csv с разделителями-запятыми без использования sql-сервера Мастер импорта импорта

Я хочу сделать это с помощью запроса, потому что я хочу использовать запрос в автоматизации

Возможно ли это? Я искал это и не нашел хорошего ответа.

4b9b3361

Ответ 1

Некоторые идеи:

В 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 (Командная строка)

Пример:

В командной строке вы можете запустить запрос и экспортировать его в файл:

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

Дополнительная информация здесь: ExcelSQLServer

Примечания:

  • В этом подходе будет отображаться информация о "Rows affected" в нижней части файла, но вы можете избавиться от этого, используя "SET NOCOUNT ON" в самом запросе.

  • Вы можете запустить хранимую процедуру вместо фактического запроса (например, "EXEC Database.dbo.StoredProcedure" )

  • Вы можете использовать любой язык программирования или даже пакетный файл для автоматизации этого

Использование BCP (Командная строка)

Пример:

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

Важно процитировать разделитель запятой как -t ',' vs just -t,

Дополнительная информация здесь: bcp Утилита

Примечания:

  • В соответствии с использованием SQLCMD вы можете запускать хранимые процедуры вместо реальных запросов
  • Вы можете использовать любой язык программирования или пакетный файл для автоматизации этого

Надеюсь, что это поможет.

Ответ 2

Вот вариант я нашел для экспорта в Excel (может быть изменен для CSV, я считаю)

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

Ответ 3

Вы также можете использовать следующий модуль Node.js, чтобы сделать это с легкостью:

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);
   });

Ответ 4

Из SQL Server Management Studio

Щелкните правой кнопкой мыши таблицу, которую вы хотите экспортировать, и выберите "Выбрать все строки"

Щелкните правой кнопкой мыши окно результатов и выберите "Сохранить результаты как..."

Ответ 5

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;

Ответ 6

Я написал небольшой инструмент, который делает именно это. Код доступен в github.

Сбрасывать результаты одного (или более) SQL-запросов в один (или несколько) CSV файлов:

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

Приветствия.

Ответ 7

Возможно, мертвая лошадь, но некоторое время назад я пытался сделать то же самое и наткнулся на сценарий для создания STP, который пытался сделать то, что я искал, но у него было несколько причуд, которые требовали некоторого внимания. В попытке отследить, где я нашел скрипт для публикации обновления, я наткнулся на эту ветку, и мне показалось, что это хорошее место для публикации.

Этот STP (по большей части я не берусь в кредит, и я не могу найти сайт, на котором я его нашел), принимает имя схемы, имя таблицы и Y или N [для включения или исключения заголовков] в качестве входных параметров и запрашивает предоставленную таблицу, выводя каждую строку в кавычках в формате csv, разделенных запятыми.

Я сделал множество исправлений/изменений в оригинальном сценарии, но его кости взяты из OP, кто бы это ни был.

Вот сценарий:

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'

Ответ 8

В окне запроса SQL Server Management Studio

  1. Выбрать все значения набора результатов
  2. Щелкните правой кнопкой мыши и выберите "Сохранить результаты как"

Table Content to CSV

  1. Сохранить как файл CSV