RFC 4180:
RFC 4180定义Common Format and MIME Type for Comma-Separated Values (CSV) Files
。 其中一个要求RFC 4180
表述为如下。 这是一点#7
在RFC链接。
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中:
DTS Export/Import Wizard
在SQL Server 2000
似乎符合上述标准,即使RFC 4180本身似乎已在2005年10月出版的唯一。 我使用下面的说明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中:
SQL Server Import and Export Wizard
在SQL Server 2012
不会从表中根据RFC 4180,我使用下面的说明SQL Server 2012的版本中定义的标准将数据导出到CSV文件。
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 <X64> (Build 7601: Service Pack 1) (Hypervisor)
问题模拟:
下面是我都SQL Server 2000和SQL Server 2012的跑进来一个样本。 我跑到下面的查询创建一个表并插入一些记录。 该ItemDesc
列有在它双引号的数据。 我的目的是将数据从这两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
在DTS Export/Import Wizard
在SQL Server 2000
,我用下面的设置,以将数据导出到CSV文件。 我该文件的名称保存SQLServer2000_ItemInformation.csv
。
在SQL Server Import and Export Wizard
在SQL Server 2012
,我用下面的设置,以将数据导出到CSV文件。 我该文件的名称保存SQLServer2012_ItemInformation.csv
。
下面是使用超越比较两个文件之间的比较。 左侧包含所产生的文件SQL Server 2000
和右侧包含生成的文件SQL Server 2012
。 你可以看到,从左侧文件SQL Server 2000
包含附加双引号中的数据列,以弥补嵌入式引号。 这符合规定的标准RFC 4180
,但它显然是从生成的文件中缺少SQL Server 2012
搜索网站:
我搜索在网络上此问题,并发现了下面的链接。 以下是Microsoft Connect上的错误报告。 所有这些问题似乎都与导入文件,但有关数据导出什么。 因为所有这些错误已被关闭Fixed
。
- SSIS平面文件分析器不读取嵌入文本数据列分隔符
- 平面文件连接管理器无法处理文本分隔符的CSV文件
- 在平面文件嵌入式报价导入失败
- BUG:平面文件连接管理:多个字符的文本限定符不加载所有数据
后下MSDN上的博客指出,变化已经在SQL Server 2012中已取得相对于Flat file source supports embedded qualifiers and a variable number of columns per row
- SSIS -什么在SQL Server Denali的新
在MSDN博客另一个后国家下的部分相同的Embedded Qualifiers
。
- 迪纳利平面文件源代码更改
解决方法,我知道的:
我知道一种解决方法通过编写一个查询,将取代所有双引号(来解决这个问题"
有两个双引号在我的专栏的数据() ""
),使导出的文件将结束与正确的嵌入式预选赛的数据。这将避免直接从表中把数据原样。
我的问题:
我不知道这个问题已经真正固定在
SQL Server 2012
。 有这个问题一直只固定importing
已嵌入文本预选赛和文件not
用于exporting
数据到CSV?也许,我清楚地做错了什么和缺少明显。 可能有人请向我解释什么,我做错了什么?
微软连接:
我提出了关于微软连接网站的错误报告得到他们的反馈。 这里是链接到错误报告。 如果你认为这是一个错误,请访问以下链接投票了对Microsoft Connect
网站。
导出为CSV在嵌入式文本识别符不符合RFC 4180