需要从SQL Server将包含换行符的字段导出为CSV

Joh*_*ton 29 csv file-format sql-server-2005

我正在运行SQL Server Management Studio 2005中的查询,该查询将HTML文件存储为字符串,例如:

SELECT html 
FROM table 
Run Code Online (Sandbox Code Playgroud)

此查询很好地显示在"结果"窗口中,即每行包含整个HTML文件的字符串,每行一个记录.

但是,当我使用"结果到文件"选项时,它会将其导出为不可用的CSV,并且在字段中(即在HTML中)发生换行时,CSV中会出现换行符,而不是根据需要每行换行一行.我尝试使用"网格"和"文本"结果的查询>查询选项,但无济于事.出口到CSV的字段不会出现在引号中.

一些想法:

  1. 可能会附加带有SQL的引号吗?

  2. 是否有一些T-SQL等同于其他方言中可能的WITH CSV HEADER命令?

Ray*_*Ray 26

我没有看到你将html导出到csv会有多大成功 - 它真的不是csv的意思.你最好使用xml格式,其中html代码可以包含在cdata元素中.

也就是说,你可以尝试使用Replace函数来删除换行符,你可以手动添加引号 - 如下所示:

select '"' + replace (replace (html, char(10), ''), char(13), '') + '"'
Run Code Online (Sandbox Code Playgroud)

如果你的html值中有双引号,你需要逃避它们.


Ufu*_*arı 19

如果您使用的是Visual Studio,则Server Explorer是另一种解决方案.您可以正确地从其网格中复制和粘贴结果.

  • 这应该是正确的答案(如果你当然有VS2013,但是如果你是使用Sql Server的MS堆栈开发人员,你可能会这样做).谢谢@Ufuk - 你救了一天! (3认同)

Zan*_*ano 17

按照最接近的一个标准,我们有,一个格式正确的CSV文件应包含报价要么分离器(最常见的领域;,)或断行.

SQL Server Management Studio可以做到这一点,但令人惊讶的是它没有默认启用此选项.要启用,请转到工具→选项→查询结果→结果到网格,然后选中"在保存.csv结果时引用包含列表分隔符的字符串"

  • 需要注意的是,SSMS将限定包含分隔符或限定符的字段,但它不会限定包含换行符的字段.因此,在这方面,SSMS生成技术上无效的CSV文件. (14认同)
  • 需要重新启动SSMS for 2008 R2才能使该设置生效. (7认同)
  • 要使此设置生效,SSMS不需要重新启动,但只对新的查询窗口生效. (3认同)

RPh*_*der 11

我知道这有多大,但我发现它和其他人也可能.你可能想要进一步采取Martijn van Hoof的答案,除了回车(13)和换行(10)之外,还要删除可能的标签(char(9)).

SELECT REPLACE(REPLACE(REPLACE(mycolumn, CHAR(9), ''), CHAR(10), ''), CHAR(13), '') as 'mycolumn' FROM mytable
Run Code Online (Sandbox Code Playgroud)


Mar*_*oof 7

带换行符的列:"mycolumn"

SELECT REPLACE(REPLACE(mycolumn, CHAR(13), ''), CHAR(10), '') as `mycolumn` FROM mytable
Run Code Online (Sandbox Code Playgroud)

这取代了换行符.


Baa*_*ali 6

我知道这是一个非常古老的问题,现在已经得到了回答,但这也应该有所帮助:

 SELECT html
 From table
 For Xml Auto, Elements, Root('doc') 
Run Code Online (Sandbox Code Playgroud)

它应该吐出一个xml然后你可以将该xml导入excel