具有FMT格式文件错误的大容量插入一致性格式DAT文件

问题描述 投票:-1回答:2

我正在使用SQL Server2017。我正在尝试将许多BULK INSERT文件.DAT导入SQL Server,这些文件用列的Pilcrow()和小写的Thorn(< [þ)用于文本(这是电子数据展示平台中常见的定界符格式)。这是数据文件的示例:

enter image description here

我的理解是,我需要一个格式文件来执行此操作。我创建了以下FMT文件(请注意,我有一个“虚拟”行,其中添加了前面的文本定界符):

enter image description here

然后我运行以下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”,这是行不通的。

任何建议将不胜感激。

谢谢。

sql-server bulkinsert bcp
2个回答
0
投票
使用格式文件用那些特定字符作为分隔符来加载文件似乎非常困难。您可以尝试使用以下方法加载文件(需要一些额外的工作):

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

结果:enter image description here

0
投票
您只需要添加到行终止符即可。最后一个字段终止符。您的行没有被两个字节“ \ r \ n”终止。它以三个字节结尾...“小写刺(þ)\ r \ n”

这是假设每行的最后两个字节确实是\ r \ n错误不正确是常见的错误。

© www.soinside.com 2019 - 2024. All rights reserved.