我可以听到你说:那就不是那么简单,是吧。
这是表格:
CREATE TABLE [bulkimport].[Test](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Data] [nvarchar](50) NULL,
CONSTRAINT [PK_Test_1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
这是tsql:
TRUNCATE TABLE bulkimport.Test
BULK INSERT bulkimport.Test
FROM 'D:\Referenzliste_VKnr.csv'
WITH (
FORMATFILE='D:\VKnrImport.xml',
CODEPAGE=28591,
ERRORFILE='D:\VKnrImportError.txt'
)
我的配置文件如下所示:
<?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="\r\n" COLLATION="SQL_Latin1_General_CP1_CI_AS" />
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Data" LENGTH="50" xsi:type="SQLNVARCHAR" />
</ROW>
</BCPFORMAT>
最后,摘自数据:
18
26
34
42
59
67
75
83
91
109
117
125
133
每行后面都有一个回车换行符,最后留下一行空行。我使用SQL Server 2012为csv文件中的每个条目获取NULL。
答案 0 :(得分:1)
您的问题与this one不完全相同(您没有收到任何错误),但这是同样的问题。作为文档says:
使用XML格式文件时,您无法跳过列 使用bcp命令或BULK直接导入表 INSERT语句。但是,您可以导入除最后一列之外的所有列 一张桌子。如果你必须跳过除最后一列之外的任何一栏,你必须 创建仅包含列的目标表的视图 包含在数据文件中。然后,您可以批量导入数据 将文件存入视图。
换句话说,在使用XML格式文件时,您只能跳过表中的 last 列。但您试图跳过Id
列,即第一个列。
两种解决方案是:
当我使用这个非XML格式文件时,您的数据加载良好:
10.0
1
1 SQLCHAR 0 100 "\r\n" 2 Data Latin1_General_CI_AS
但是OPENROWSET
更灵活,因为您可以使用SELECT
重新排序列或以其他方式处理来自平面文件的数据。