使用转义引号将SQL数据库批量导出为CSV

Sam*_*Sam 5 sql-server csv batch-file

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

有一些使用sqlcmd或bcp的解决方案,但到目前为止,我找不到任何正确转义引号,逗号或换行符的解决方案.

例如,此命令创建一个不错的csv,但忽略了引号和逗号,这使得csv文件无法使用:

bcp MyDatabase..MyTable out c:\test.csv -c -T -t, -r\n -S MYPC
Run Code Online (Sandbox Code Playgroud)

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

1,contains " quote
2,contains , comma
3,contains ; semi
4,contains ' single quote
Run Code Online (Sandbox Code Playgroud)

由于引号和逗号,其他程序无法导入.当然,我可以改变分离器标签或管道符号,但是这不能解决真正的问题:无论分隔符是,如果它的数据存在,它会使导出文件不可用.

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

Sam*_*Sam 2

我在Iain Elder另一个 Stackoverflow 答案中找到了一个可以正确编码 csv 文件的解决方案:

他使用 PowerShell 导出正确的 csv:

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
Run Code Online (Sandbox Code Playgroud)

他的解决方案正确地编码了分隔符、换行符、引号,并且也适用于长内容。

我仍然觉得奇怪,没有其他导出似乎可以正确支持 csv。事情没那么复杂。