【发布时间】:2016-08-13 04:21:41
【问题描述】:
我有一个扩展名为“.dat”的源文件,并希望将其作为表加载到 SSMS 中。我的代码如下:
但是给了我以下错误。我还在 Notepad++ 中打开了该文件以检查 ROWTERMINATOR,它似乎是 LF。
消息 4866,第 16 级,状态 8,第 34 行 批量加载失败。数据文件中第 1 行第 25 列的列太长。请验证是否正确指定了字段终止符和行终止符。 消息 7301,第 16 层,状态 2,第 34 行 无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”获取所需的接口(“IID_IColumnsInfo”)。
代码:
USE myDB
GO
CREATE TABLE [dbo].[myTable]
(
Column1 NVARCHAR(255) NULL,
Column2 NVARCHAR(255) NULL,
Column3 NVARCHAR(100) NULL,
Column4 NVARCHAR(255) NULL,
Column5 NVARCHAR(255) NULL,
Column6 NVARCHAR(255) NULL,
Column7 NVARCHAR(255) NULL,
Column8 NVARCHAR(255) NULL,
Column9 NVARCHAR(255) NULL,
Column10 NVARCHAR(255) NULL,
Column11 NVARCHAR(255) NULL,
Column12 NVARCHAR(255) NULL,
Column13 NVARCHAR(255) NULL,
Column14 NVARCHAR(255) NULL,
Column15 NVARCHAR(255) NULL,
Column16 NVARCHAR(255) NULL,
Column17 NVARCHAR(255) NULL,
Column18 NVARCHAR(255) NULL,
Column19 NVARCHAR(255) NULL,
Column20 NVARCHAR(255) NULL,
Column21 NVARCHAR(255) NULL,
Column22 NVARCHAR(255) NULL,
Column23 NVARCHAR(255) NULL,
Column24 NVARCHAR(255) NULL,
Column25 NVARCHAR(255) NULL
);
BULK
INSERT [dbo].[myTable]
FROM 'C:\Users\John\Documents\work\MyFile.dat'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
);
SELECT * FROM [dbo].[myTable]
以下是数据样本以及 SSMS 失败的那一行:
Kansas City 1 494124 20 McDonalds KANSAS CUSTOMERS 22 WYANDOTTE COUNTY 239 Wyandotte County 964 S 73RD ST KANSAS CITY KS 66111 2805 Y Y Y N N 4 D Old School Loyal N 49412401
【问题讨论】:
-
似乎是???您不能确认行尾字符吗?可能是cr-lf。 (\r\n)
-
是的,行终止符是 LF,即 '\n' ,但我也尝试过 '\r\n'
-
数据中的示例行?您的数据中有多少列?是大于还是小于 9?
-
共有 25 列。但出于安全原因,我不能透露它。但是当我注释掉 FIRSTROW 和 ROWTERMINATOR 时,它确实插入了许多行,但都在源文件的一个(第 25 列)中
-
没有样本数据也无济于事。不过,您应该查看数据。它说它在第 9 列上失败了。您的表中有 9 列,但您正在尝试导入 25 个字段???这是个问题。
标签: sql sql-server load bulkinsert