首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用转义引号将SQL数据库批量导出到CSV

用转义引号将SQL数据库批量导出到CSV
EN

Stack Overflow用户
提问于 2014-06-12 09:09:06
回答 4查看 8.9K关注 0票数 5

我正在寻找一种将SQL Server表批量导出到csv文件的方法。

有一些使用sqlcmd或bcp的解决方案,但到目前为止,我没有找到正确转义引号、逗号或换行的解决方案。

例如,这个命令创建了一个很好的csv,但是忽略了引号和逗号,这使得csv文件不可用:

代码语言:javascript
复制
bcp MyDatabase..MyTable out c:\test.csv -c -T -t, -r\n -S MYPC

从我的四个行的示例数据中,每个行都包含一些其他特殊字符,这将创建如下文件:

代码语言:javascript
复制
1,contains " quote
2,contains , comma
3,contains ; semi
4,contains ' single quote

由于引号和逗号,这是不重要的其他程序。当然,我可以将分隔符更改为选项卡或管道符号,但这并不能解决真正的问题:不管分隔符是什么,如果它存在于数据中,它将使导出文件不可用。

那么,如何使用标准SQL工具(如BCP、sqlcmd或类似工具)将批处理中的数据批量导出到工作的csv文件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-06-16 08:06:26

我找到了一个解决方案,用艾恩·埃尔德正确地编码csv文件艾恩·埃尔德

他使用PowerShell导出适当的csv:

代码语言:javascript
复制
Import-Module -Name SQLPS
$cd = Get-Location
Invoke-Sqlcmd -Query "SELECT * FROM DimDate;" `
              -Database AdventureWorksDW2012 `
              -Server localhost |
Export-Csv -NoTypeInformation `
           -Path "$cd\DimDate.csv" `
           -Encoding UTF8

他的解决方案正确地编码分隔符、换行、引号和长内容。

我仍然感到奇怪的是,没有其他出口似乎适当地支持csv。没那么复杂。

票数 2
EN

Stack Overflow用户

发布于 2014-06-12 22:13:37

使用应该正确地转义引号(但它仅限于128个字符,没有换行):

代码语言:javascript
复制
BCP " select quotename(quotedCol,CHAR(34)),quotename(secondCol,CHAR(34))from 
testdb.dbo.table_1" queryout temp.csv -c -T -S. -t","

给定值this is "between quotes"def,它产生:

"this is ""between quotes""","def",我认为这是正确的报价/逃脱根据csv的基线。

来源:输出

票数 4
EN

Stack Overflow用户

发布于 2014-06-12 12:21:35

要么使其固定宽度,要么手动添加引号分隔符。这两者都可以通过以下方式实现

例如,您的视图将是

代码语言:javascript
复制
SELECT C1, '"' + REPLACE(C2,'"','\"') + '"' As C2 FROM YourTable

然后从BCP和C2中的这个视图中选择引号分隔,数据中的引号将用\(大部分)转义。

要使其固定,宽度只是另一个字符串表达式,它将字段与适当的填充连接起来。

您可以在BCP中使用查询,但我不知道您如何转义引号(!)不管你做什么,这些名言都是痛苦的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24180526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档