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

IT技术 javascript sql-server database csv
2021-01-21 06:16:48

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

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

是否可以?我搜索了那个并没有找到一个好的答案

6个回答

一些想法:

来自 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 实用程序

笔记:

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

希望这可以帮助。

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

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

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=D:\testing.xls;', 
'SELECT * FROM [SheetName$]') select * from SQLServerTable
显然,我们不同意提供完整答案的重要性,但我可以接受——同意不同意。
2021-03-18 06:16:48
答案如下:stackoverflow.com/a/14544245/82961但请在请其他人为您完成之前先做一些努力。当您无法弄清楚如何去做时,而不是当您对找出如何去做不感兴趣时​​,请使用 SO。那只会让你成为一个懒惰的程序员而不是一个好程序员..没有冒犯的意思..另外请养成完整阅读错误消息的习惯,大多数时候你需要的所有线索都在那里。
2021-03-20 06:16:48
您拥有修复消息本身中的错误所需的所有信息。只需启用“Ad Hoc Distributed Queries”。
2021-04-08 06:16:48
我有 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.
2021-04-10 06:16:48
<sigh>,当我提供答案时,我会给出一个完整的答案,stackexchange 中超过 99% 的人也是如此。stackexchange 的目的是避免人们从网络上寻找答案。显然,并不是每个人都看到了这一点的重要性。
2021-04-13 06:16:48

您还可以使用以下 Node.js module轻松完成:

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)
2021-04-10 06:16:48
优秀和有用。无论如何,有没有办法过滤表数据?创建一个特定的查询?
2021-04-11 06:16:48
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;
这是什么语言/环境?
2021-03-16 06:16:48
看起来像 SAS 的 PROC SQL
2021-03-24 06:16:48

来自 SQL Server Management Studio

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

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

此解决方案在选择任一选项卡时,或CSV不会正确地引用列,引用分隔符,或处理结果,
2021-03-16 06:16:48
如果您有 NULL 列 - 使用 COALESCE(ColumnName, ' ') - 它会将 NULL 值替换为空字符串。
2021-03-18 06:16:48
> 我想用查询来做,因为我想在自动化中使用查询
2021-03-25 06:16:48
这个问题要求自动化解决方案。
2021-04-03 06:16:48