78

我想:在csv不使用 sql Server 导入导出向导的情况下,将表从 sql server 数据库导出到逗号分隔文件

我想使用查询来做到这一点,因为我想在自动化中使用查询

可能吗?我搜索了一下,没有找到好的答案

4

10 回答 10

142

一些想法:

从 SQL Server 管理工作室

 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

不要引用分隔符只使用 -s,而不是引用 -s',' 除非您想将引号设置为分隔符。

更多信息:ExcelSQLServer

笔记:

  • 这种方法将在文件底部包含“受影响的行”信息,但您可以通过在查询本身中使用“SET NOCOUNT ON”来摆脱这种情况。

  • 您可以运行存储过程而不是实际查询(例如“EXEC Database.dbo.StoredProcedure”)

  • 您可以使用任何编程语言甚至批处理文件来自动执行此操作

使用 BCP(命令提示符)

例子:

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

将逗号分隔符引用为 -t',' 与仅 -t, 很重要

更多信息:bcp 实用程序

笔记:

  • 根据使用 SQLCMD 时,您可以运行存储过程而不是实际查询
  • 您可以使用任何编程语言或批处理文件来自动执行此操作

希望这可以帮助。

于 2013-01-10T20:47:54.803 回答
8

这是我发现导出到 Excel 的选项(我相信可以修改为 CSV)

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=D:\testing.xls;', 
'SELECT * FROM [SheetName$]') select * from SQLServerTable
于 2014-01-03T12:12:10.033 回答
8

您还可以使用以下 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);
   });
于 2016-02-04T08:45:58.657 回答
4
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;
于 2015-06-29T15:27:53.563 回答
4

从 SQL Server 管理工作室

右键单击要导出的表并选择“选择所有行”

右键单击结果窗口并选择“将结果另存为...”

于 2016-07-11T22:33:04.763 回答
2

你不需要通过 SSMS 或编程语言来解决问题。

以管理员身份运行 PowerShell 提示符,然后:

Install-Module -Name SqlServer

安装后,您可以将任何表导出为 CSV,如下所示:

Invoke-Sqlcmd -Query "SELECT * FROM [mydatabase].[dbo].[mytable]" -ServerInstance "MYSQLSERVER" | Export-Csv -Path "c:\temp\output.csv" -NoTypeInformation

你可以把它放在一个 .PS1 脚本中,然后随心所欲地执行它。

于 2021-09-02T07:53:34.137 回答
1

在 SQL Server Management Studio 查询窗口中

  1. 选择所有结果集值
  2. 右键单击并选择“将结果另存为”

表格内容转 CSV

  1. 另存为 CSV 文件
于 2019-02-26T06:33:17.387 回答
1

我写了一个小工具来做这件事。代码可在 github 上找到。

要将一个(或多个)SQL 查询的结果转储到一个(或多个)CSV 文件:

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

干杯。

于 2016-11-23T17:16:27.253 回答
0

当您出于某种原因想要所有表格时?

您可以在 SSMS 中生成这些命令:

SELECT 
CONCAT('sqlcmd -S ',
'Your(local?)SERVERhere'
,' -d',
'YourDB'
,' -E -s, -W -Q "SELECT * FROM ',
TABLE_NAME,
'" >',
TABLE_NAME,
'.csv') FROM INFORMATION_SCHEMA.TABLES

并再次获得这样的行

sqlcmd -S ... -d... -E -s, -W -Q "SELECT * FROM table1" >table1.csv
sqlcmd -S ... -d... -E -s, -W -Q "SELECT * FROM table2" >table2.csv
...

还可以选择使用更好的 TAB 作为分隔符,但它需要一个奇怪的 Unicode 字符 - 在 CMD 中使用 Alt+9,它就像这样 ○ (Unicode CB25),但只能通过复制/粘贴到命令行而不是批量工作.

于 2020-05-11T06:43:18.830 回答
-1

也许是死马,但不久前我试图做同样的事情并遇到了一个脚本来创建一个试图做我正在寻找的东西的 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'
于 2018-10-16T15:32:08.003 回答