将表从数据库导出到 csv 文件

     2023-02-24     90

关键词:

【中文标题】将表从数据库导出到 csv 文件【英文标题】:Export table from database to csv file 【发布时间】:2012-12-22 04:01:17 【问题描述】:

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

我想使用查询来完成,因为我想在自动化中使用查询

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

【问题讨论】:

是的,有可能,您可以使用 C#、php 和几乎任何其他编程语言...What have you tried? 你可以使用这个API:youtube.com/watch?v=bwUy80UDWhE 相关帖子 - Export query result to .csv file in SQL Server 2008 【参考方案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

不要引号分隔符只使用 -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 Utility

注意事项:

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

希望这会有所帮助。

【讨论】:

第一个建议非常直接。 :-) 根据数据中的逗号和换行符(这两者在适当的 CSV 文件中有效,正确引用),其他的工作效果会有所不同。 第一个建议转储没有列名的数据 (SQL Server 2014)。有没有方便的方法来包含它们? @PrzemyslawRemin - 确保选择了结果到网格,运行查询,然后在查询结果网格中,右键单击左上角的空白角单元格并选择“使用标题复制”。它提供了一个制表符分隔的输出,可以很容易地粘贴到 excel 中。 dunc,问题要求自动化解决方案。 不起作用。我尝试了第一种方法,但它不会产生有效的 CSV 输出。特别是,它不会转义数据中可能自然出现的分隔符。如果您能够发现数据中没有出现并且也被 sqlcmd 接受的分隔符,它可能适用于某些特定情况。【参考方案2】:

这是一个选项 I found 导出到 Excel(我相信可以修改为 CSV)

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

【讨论】:

我收到了SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', search for 'Ad Hoc Distributed Queries' in SQL Server Books Online. 您拥有修复消息本身错误所需的所有信息。只需启用“即席分布式查询”即可。 ,当我提供答案时,我会给出一个完整的答案,stackexchange 中超过 99% 的人也这样做。 stackexchange 的目的是避免人们从网络上寻找答案。显然,并不是每个人都看到了这一点的重要性。 这里是答案:***.com/a/14544245/82961 但是在请别人为你做之前,请先付出一些努力。当您无法弄清楚如何做而不是当您对找出如何做不感兴趣时​​,请使用 SO。那只会让你成为一个懒惰的程序员而不是一个好的程序员。没有冒犯的意思。另外请养成完整阅读错误消息的习惯,大多数时候你需要的所有线索都在那里。 显然,我们不同意提供完整答案的重要性,但我可以接受——同意不同意。【参考方案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);
   );

【讨论】:

实际上尽管 -1 值是我找到的最佳答案..(下载 Node.JS) 非常好用。无论如何,有没有办法过滤表格数据?创建一个特定的查询?【参考方案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;

【讨论】:

这是什么语言/环境? 看起来像 PROC SQL for SAS【参考方案5】:

来自 SQL Server Management Studio

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

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

【讨论】:

this solution, when selecting either tab delimited or csv does not quote columns correctly, quoting delimiters, or dealing with newlines in the result, 如果您有 NULL 列 - 使用 COALESCE(ColumnName, ' ') - 它会将 NULL 值替换为空字符串。 问题要求自动化解决方案。 > 我想使用查询来完成,因为我想在自动化中使用查询【参考方案6】:

您无需费力地使用 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 脚本中,然后随意执行。

【讨论】:

Powershell 是一个非常好的 MS 环境自动化工具。您的解决方案也很优雅。很好地找到了一个 9 岁问题的相关答案!【参考方案7】:

我写了一个小工具来做这件事。代码可用on github。

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

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

干杯。

【讨论】:

【参考方案8】:

在 SQL Server Management Studio 查询窗口中

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

    另存为 CSV 文件

【讨论】:

此方法的唯一问题是它在 CSV 文件末尾生成 3 行,其中包含执行时间的文本。因此,您将需要编辑 csv 文件。如果它太大,请使用 Notepad++。我会弄清楚如何消除最后 3 行文本。 Notepad++ 可以打开最大 2GB 的文件,如果您超过该限制,我建议您不要使用 CSV 格式。【参考方案9】:

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

您可以在 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),但只能通过复制/粘贴到命令行来工作不是批量的。

【讨论】:

【参考方案10】:

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

【讨论】:

如何自动将表从 MSSQL 或 Access 导出到适当的 XML 文件中?

...的数据。通常这不是必需的,因为我们通常只是交出Access数据库或csv文件,这就足够了。但是在这种情况下,我需要自动从十几个表中导 查看详情

如何将表从mysql数据库导出到excel?

】如何将表从mysql数据库导出到excel?【英文标题】:Howtoexporttabletoexcelfrommysqldatabase?【发布时间】:2014-04-0808:00:37【问题描述】:我在mysql中有一个表,它对于超过100k行来说非常大,我想将它导出到excel。但是,我在phpmyadmin上尝... 查看详情

使用c#将表从Sql Server导出到PDF文件

】使用c#将表从SqlServer导出到PDF文件【英文标题】:ExportTablefromSqlServertoPDFfileusingc#【发布时间】:2014-05-2620:18:43【问题描述】:我在sql中有几个表,我想在单击表单按钮后将它们导出为PDF文件有谁知道我该怎么做?当我将表格从... 查看详情

将表从 google bigquery 导出到 google 存储

】将表从googlebigquery导出到google存储【英文标题】:exporttablesfromgooglebigquerytogooglestorage【发布时间】:2016-10-1714:37:11【问题描述】:我是bigQuery的新手。我需要将表从BigQuery导出到谷歌存储。目前,我可以按数据集列出所有表。有... 查看详情

基于单击命令按钮将表从 Access 导出到 Excel

...允许用户通过单击表单上的命令按钮自动将某个表从access数据库导出到excel工作表。导出表格后,我希望Excel工作表自动弹出。但是我有其他选项卡已经在电子 查看详情

如何将表数据从 PostgreSQL (pgAdmin) 导出到 CSV 文件?

】如何将表数据从PostgreSQL(pgAdmin)导出到CSV文件?【英文标题】:HowtoexporttabledatafromPostgreSQL(pgAdmin)toCSVfile?【发布时间】:2019-05-1514:14:59【问题描述】:我正在使用pgAdmin4.3版,我想将一个表数据导出到CSV文件。我使用了这个查询CO... 查看详情

使用适当的变量类型将 CSV 文件从 redshift 导出到本地

...【发布时间】:2019-06-0921:01:00【问题描述】:我正在尝试将表从redshift直接导出到我的本地计算机。我成功地从redshift获取数据,但它并没有区分任何数据。当我做pandas.dtypes时,它们都以对象的形式出现,而不 查看详情

在 oracle 12.1 中如何使用 sqlplus 将表数据导出到 csv 文件中

...出。那么这种卸载的方式是什么。我可以通过sqlplus访问数据库服务器。我在互联网上搜索,发现以下命令。但似乎他们不工作12.1SQ 查看详情

将表从 Dev DB 复制到 QA DB

...问题描述】:我正在尝试使用导入/导出向导将表从开发数据库复制到SQLServer中的QA数据库。大约有660万行,大约需要7个小时才能完成。有没有更快的方法来完成任务?下面是我正在使用的代码:SELECT*FROM[Table_Name]WITH(NOLOCK)WHERE[Col... 查看详情

无法将表从 BigQuery 导出到 Google Cloud Storage

】无法将表从BigQuery导出到GoogleCloudStorage【英文标题】:CannotExportaTablefromBigQuerytoGoogleCloudStorage【发布时间】:2016-10-2503:59:32【问题描述】:我正在尝试从控制台/命令行将大查询中的表导出到谷歌云存储。控制台作业运行了几分... 查看详情

sql将表导出到txt/csv文件(代码片段)

查看详情

SSIS - 将表数据分块导出到平面文件

】SSIS-将表数据分块导出到平面文件【英文标题】:SSIS-Exporttabledatatoflatfileinchunks【发布时间】:2016-06-2900:49:38【问题描述】:我需要将表数据导出到一个平面文件(.csv格式)中,每个文件每个只包含5000条记录。如果表有10000条... 查看详情

java示例代码_将表导出并保存到。java中access数据库的csv

java示例代码_将表导出并保存到。java中access数据库的csv 查看详情

如何将表中的数据作为 CSV 从 Greenplum 数据库导出到 AWS s3 存储桶

】如何将表中的数据作为CSV从Greenplum数据库导出到AWSs3存储桶【英文标题】:HowtoexportdatafromtableasCSVfromGreenplumdatabasetoAWSs3bucket【发布时间】:2018-08-3000:09:19【问题描述】:我在表格中有数据select*frommy_table它包含10k观察。如何将表... 查看详情

将表从美国数据集移动到欧盟数据集

】将表从美国数据集移动到欧盟数据集【英文标题】:MoveTablesfromUSdatasettoEUdataset【发布时间】:2016-07-2709:16:42【问题描述】:我在位于美国的GoogleCloudPlatform(和Bigquery)上创建了一些项目。现在我只想在欧盟创建数据集。有什... 查看详情

如何将表从存储过程检索到数据表?

】如何将表从存储过程检索到数据表?【英文标题】:HowcanIretrieveatablefromstoredproceduretoadatatable?【发布时间】:2010-12-2809:04:28【问题描述】:我创建了一个存储过程以便返回一个表。类似这样的:createproceduresp_returnTablebodyofprocedur... 查看详情

将表从一个数据库复制到另一个

】将表从一个数据库复制到另一个【英文标题】:copyingatablefromonedatabasetoanother【发布时间】:2009-02-0413:20:09【问题描述】:我正在尝试将我的一些表存档到同一服务器上的另一个数据库中。但是INSERTINTO...SELECT...FROM在构建时给了... 查看详情

如何使用 pyodbc 将表从 MS Access 迁移到 Postgres?

...用pyodbc来执行此操作,因为它允许我使用python连接到Access数据库并查询数据。我的问题是我不完全确定如何以编程方式创建 查看详情