将SQL Server表导出为CSV会发出逗号,制表符和引号

时间:2012-04-13 17:12:08

标签: sql-server excel encoding csv

导出到平面文件CSV后,带逗号,引号和标签的列会导致Excel出现问题。供应商需要在Excel中读取文件以进行手动更改,然后以平面文件CSV格式将其用于将PL / SQL加载到Oracle表中。

我有几个问题:

  • 我可以从SQL Server中的表中删除这些字符,但是有更聪明的方法吗?
  • 从Excel中保存CSV文件会在尝试将文件加载到Oracle时导致问题吗?
  • 我们需要第一行有列名。是否有任何SQL方法可以一次性生成所有文件(第一行中的标题)而不是使用导出到平面文件?

更新:我正在尝试将MSSQL导出为ex​​cel,但是有些表给出了“定义了太多字段”的错误

3 个答案:

答案 0 :(得分:2)

我相信你有几个选择。

1)选择一个不同的分隔符(一个不在输出中)〜或`或|可能会工作

2)用引号包装每个输出字段,csv excel知道将其视为一个字段。

2a)如果你的输出包含“那么你需要加倍它们以便CSV / Excel知道你的意思是”而不是结束或开始新的字段。

3)因此不要使用CSV,请使用XML。 Oracle也处理它..

4)根据导入/导出位置而不是描绘

如此直接回答您的问题:

但有更聪明的方法吗?使用XML,SQL server& Oracle既支持也可以从中导入。

在excel中完成后保存到csv是否有意义 不是我

尝试将文件加载到Oracle中会导致问题吗? 除非你已经处理了所有特殊字符并通过适当的描述正确地逃脱了它们,否则它可以。

以一种方式生成所有文件(第一行中的磁贴)而不是使用导出到平面文件的任何SQL方式?我再次建议使用XML或EDI。

答案 1 :(得分:0)

我遇到了类似的挑战 - 从SQL导出到Excel ...同时从查询结果中轻松完成,右键单击并将结果保存为CSV。问题是任何包含逗号的列都会破坏表的结构。

我使用OPENROWSET解决了这个问题,并将数据直接输入Excel文件。我发现这样做的最具防伪功能的方法是:SQL Server export to Excel with OPENROWSET

虽然我相信我使用了Excel和MSSQL的更新版本,但这里是我的代码:

insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Test.xlsx', [Sheet1$])
select * from TestTable

谢谢! 肯

答案 2 :(得分:0)

首先准备一条产生所需数据的SQL语句。让SQL用两个双引号("),例如""替换任何双引号字符(SELECT REPLACE(CAST(field1 as NVarchar(MAX)),'"','""') AS field1 FROM table1)。

  • 在对象资源管理器中右键单击所需的数据库
  • 在上下文菜单中,选择“任务”->“导出数据”
  • 来源:选择SQL Serve Native Client(在列表末尾)
  • 目的地:选择Flat file
  • 浏览以选择文件,例如export.csv
    • 检查Unicode
    • Text qualifier输入一个双引号字符:“
  • 选择无线电项目符号:编写查询以指定要传输的数据
  • 粘贴您的SQL代码
  • 点击进入Finish
  • 使用记事本++打开文件
    • 菜单:编码->转换为UTF-8
    • 保存文件

文本限定符是每个字段周围使用的引号字符。如果选择一个csv文件,它将自动正确设置行尾和列分隔符。