server导出csv文件不去除0 sql_sql server-如何在将数据导出到CSV平面文件时解决嵌入式文本限定符问题?...

RFC 4180:

RFC 4180定义了2556945200920921021088。Microsoft Connect的要求之一如下所述。 这是RFC链接中的点Microsoft Connect。

If double-quotes are used to enclose fields, then a double-quote

appearing inside a field must be escaped by preceding it with

another double quote. For example:

"aaa","b""bb","ccc"

SQL Server 2000:

尽管RFC 4180本身似乎仅在2005年10月发布,但Microsoft Connect中的Microsoft Connect似乎符合上述标准。我使用的是下面所述的SQL Server 2000版本。

Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)

May 3 2005 23:18:38

Copyright (c) 1988-2003 Microsoft Corporation

Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

SQL Server 2012:

Microsoft Connect中的Microsoft Connect不会根据RFC 4180中定义的标准将表中的数据导出到CSV文件。我使用的是下面所述的SQL Server 2012版本。

Microsoft SQL Server 2012 - 11.0.2316.0 (X64)

Apr 6 2012 03:20:55

Copyright (c) Microsoft Corporation

Enterprise Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor)

问题模拟:

这是我在SQL Server 2000和SQL Server 2012中都运行的示例。我运行以下查询来创建表并插入几条记录。 Microsoft Connect列中的数据带有双引号。 我的意图是使用它们的内置导出数据向导从这两个SQL Server版本中导出数据,并比较生成的CSV文件。

CREATE TABLE dbo.ItemInformation(

ItemId nvarchar(20) NOT NULL,

ItemDesc nvarchar(100) NOT NULL

)

GO

INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100338754', 'Crown Bolt 3/8"-16 x 1" Stainless-Steel Hex Bolt');

INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('202255836', 'Simpson Strong-Tie 5/8" SSTB Anchot Bolt');

INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100171631', 'Grip-Rite #11 x 1-1/2" Electro-Galvanized Steel Roofing Nails');

INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('202210289', 'Crown Bolt 1/2" x 3" "Zinc-Plated" Universal Clevis Pin');

INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('100136988', 'Tapcon 3/16" x 1-3/4" Climaseal Steel "Flat-Head" Phillips Concrete Anchors (75-Pack)');

INSERT INTO dbo.ItemInformation (ItemId, ItemDesc) VALUES ('203722101', 'KwikTap 3/16" x 2-1/4" "Flat-Head" Concrete Screws (100-Pack)');

GO

在Microsoft Connect中的Microsoft Connect上,我使用以下设置将数据导出到CSV文件。 我将文件保存为Microsoft Connect。

fdFSY.png

在Microsoft Connect中的Microsoft Connect上,我使用以下设置将数据导出到CSV文件。 我将文件保存为Microsoft Connect。

toryR.png

MvbUx.png

这是使用超越比较在两个文件之间进行的比较。 左侧包含25569452009209210210生成的文件,右侧包含SQL Server 2012生成的文件。您会注意到SQL Server 2000的左侧文件包含其他双引号来补偿数据列中的嵌入式引号。 这符合RFC 4180中指定的标准,但2556945200920921021092生成的文件中显然缺少该标准

ofh2w.png

在网络上搜索:

我在网上搜索了此错误,并找到了以下链接。 以下是Microsoft Connect上的错误报告。 所有这些问题似乎与导入文件有关,但与导出数据无关。 所有这些错误都已作为Microsoft Connect关闭。

SSIS平面文件解析器不读取文本数据中嵌入的列定界符

平面文件连接管理器不处理CSV文件中的文本定界符

平面文件导入中的嵌入式引号失败

BUG:平面文件连接管理器:多字符文本限定符不能加载所有数据

MSDN博客上的以下帖子指出,在SQL Server 2012中已对Microsoft Connect进行了更改

SSIS-SQL Server Denali的新增功能

MSDN博客上的另一篇文章在Microsoft Connect部分下也声明了同样的内容。

Denali中的平面文件源更改

我知道的解决方法:

我知道一种解决方法,可以通过编写查询来解决此问题,该查询将用两个双引号(2556945200920921021088)替换我列数据中的所有双引号(Microsoft Connect),以便导出的文件最终将带有正确的嵌入式限定符数据。 这样可以避免直接从表中直接提取数据。

我的问题:

我不知道此问题是否已在Microsoft Connect中得到真正解决。是否仅针对将文本限定符嵌入到Microsoft Connect的文件和将Microsoft Connect数据嵌入CSV的Microsoft Connect修复了此问题?

可能是,我显然做错了什么,却错过了显而易见的事情。 有人可以告诉我我在做什么错吗?

Microsoft Connect:

我已经在Microsoft Connect网站上提交了错误报告,以获取他们的反馈。 这是错误报告的链接。 如果您同意这是一个错误,请访问下面的链接在2556945200920921021088网站上投票。

导出为CSV期间的嵌入式文本限定符不符合RFC 4180

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值