我正在使用SQL Server2017。我正在尝试将许多BULK INSERT
文件.DAT
导入SQL Server,这些文件用列的Pilcrow(¶)和小写的Thorn(< [þ)用于文本(这是电子数据展示平台中常见的定界符格式)。这是数据文件的示例:
我的理解是,我需要一个格式文件来执行此操作。我创建了以下FMT文件(请注意,我有一个“虚拟”行,其中添加了前面的文本定界符):
然后我运行以下SQL语句:
BULK INSERT [dbo].[tblERRORS]
FROM 'C:\Users\myName\Documents\Errors\ErrorFile.dat'
WITH (FirstRow = 2, FORMATFILE = 'C:\Users\myName\Documents\Errors\Errors.fmt');
GO
我收到以下错误:Msg 4832,第16级,状态1,第201行批量加载:在数据文件中遇到了意外的文件结尾。消息7399,第16级,状态1,第201行链接服务器“(null)”的OLE DB提供程序“ BULK”报告了一个错误。提供程序未提供有关该错误的任何信息。
Msg 7330,第16级,状态2,第201行无法从OLE DB提供程序“ BULK”中获取链接服务器“(null)”的行。
注意:我也尝试过将FMT文件的最后一行更改为“þ\ r \ n”,这是行不通的。
任何建议将不胜感激。
谢谢。
drop table if exists [dbo].[tblERRORS]
CREATE TABLE [dbo].[tblERRORS]
(dummy nvarchar(255), DOCID nvarchar(255), dummy2 nvarchar(255), PARENT_DOCID nvarchar(255), dummy3 nvarchar(255), ATTACH_DOCID nvarchar(255), dummy4 nvarchar(255), BEGINBATES nvarchar(255), dummy5 nvarchar(255), ENDBATES nvarchar(255), dummy6 nvarchar(255))
BULK INSERT D20.[dbo].[tblERRORS] FROM 'C:\Users\myName\Documents\Errors\ErrorFile.dat'
WITH(FIRSTROW = 2, ROWTERMINATOR = '\n',
fieldterminator= 'þ'
);
GO
SELECT * FROM DBO.TBLERRORS
结果:
这是假设每行的最后两个字节确实是\ r \ n错误不正确是常见的错误。