【发布时间】:2013-09-16 00:28:25
【问题描述】:
我正在使用 XML 格式文件导入 CSV 文件,并且第一个数据行被跳过。我不知道为什么。
格式化文件
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR='","' />
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR='\n' />
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="COLUMN1" xsi:type="SQLVARYCHAR" />
<COLUMN SOURCE="2" NAME="COLUMN2" xsi:type="SQLVARYCHAR" />
</ROW>
</BCPFORMAT>
CSV
COLUMN1,COLUMN2
"ABC","ABC123456"
"TNT","TNT123456"
查询
SELECT *
FROM OPENROWSET(BULK 'C:\sample.csv',
FORMATFILE='C:\sample.xml',
FIRSTROW = 2) AS a
结果
COLUMN1 COLUMN2
------- ----------
"TNT TNT123456"
(1 row(s) affected)
如果FIRSTROW改成1,结果变成:
COLUMN1 COLUMN2
--------------------- ----------
COLUMN1,COLUMN2 "ABC ABC123456"
"TNT TNT123456"
如果从 CSV 中删除标题行并将FIRSTROW 更改为1,则结果按预期返回:
COLUMN1 COLUMN2
------- ----------
"ABC ABC123456"
"TNT TNT123456"
由于这是一个带有标题的自动报告,是否有任何其他选项可以解决这个问题?
【问题讨论】:
-
好的,所以他有点简洁,但除非我非常愚蠢(而且我对 SQL Server 的内部知识知之甚少,所以这是可能的)我不知道为什么这会被如此多地否决。这是一个有效的问题,具有足够的信息来测试和重现问题。 (我们甚至同意极不寻常的标签)
-
神圣的不必要的投票旅
-
您应该添加一些绒毛,使您的问题更加冗长。
-
这似乎是一个分隔符问题 - 我敢打赌你的标题行没有正确的
\n。此外,任何行中的第一列和最后一列将分别保留前导和尾随"。 -
对向您发送文件的人大喊大叫 :-)?
标签: sql-server csv import