【问题标题】:SQL Server: removing line breaks when exporting data to csv file using Bulk export utilitySQL Server:使用批量导出实用程序将数据导出到 csv 文件时删除换行符
【发布时间】:2019-04-02 10:00:22
【问题描述】:

我有一张表需要导出到 csv 文件。该表有一个 xml 字段,其中可以包含我必须删除的换行符。 我正在使用bcp utility 将数据从 Sql Server 导出到 csv 文件。

这是表格的结构:

ID int
CODE varchar(20)
XML_DATA xml

这是我正在使用的命令:

bcp "SELECT ID, CODE, replace(convert(nvarchar(max), XML_DATA), CHAR(13)+CHAR(10), ' ') as XML_DATA FROM MYDB.dbo.MyTable" queryout C:\output.csv -c -t0x1F -T -S "10.10.10.28"

由于某些原因,输出文件仍然包含换行符。但是,如果我在 SQL Server 上对具有换行符的记录运行相同的查询,则输出是正确的(已删除换行符):

SELECT
    ID, 
    CODE, 
    replace(convert(nvarchar(max), XML_DATA), CHAR(13)+CHAR(10), ' ') as XML_DATA
FROM MYDB.dbo.MyTable
WHERE ID = 1099; -- record with a line break in the XML_DATA field

我在这里缺少什么?

【问题讨论】:

  • 可能是您的 xml 包含 CHAR(10) + CHAR(13),而不是 CHAR(13)+CHAR(10),当您在 SSMS 中运行查询时,您看不到换行符仍然存在,因为您可能会输出到网格,您应该输出到 Text
  • @sepupic 是的,我就是这么写的。谢谢!

标签: sql sql-server tsql bulk


【解决方案1】:

解决了替换这一行

replace(convert(nvarchar(max), XML_DATA), CHAR(13)+CHAR(10), ' ') as XML_DATA

有了这个

replace(replace(convert(nvarchar(max), XML_DATA), CHAR(13), ' '), CHAR(10), ' ') as XML_DATA

另外我想指出,默认情况下 Sql Server Management Studio 在从查询结果复制/粘贴时不包括 CLRF 字符,您必须明确启用保留 CLRF 字符并重新启动 SQL Server 的选项:preverse CLRF on Sql Server Management Studio query result。这让我有些困惑^_^

【讨论】:

  • >>>你必须明确启用一个选项来保留 CLRF 字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多