【问题标题】:Bulk Insert Concordance Formatted DAT File with FMT Format File Error批量插入索引格式的 DAT 文件与 FMT 格式文件错误
【发布时间】:2020-05-17 07:39:47
【问题描述】:

我正在使用 SQL Server 2017。我正在尝试将BULK INSERT 插入 SQL Server 中的一些 .DAT 文件,这些文件用 Pilcrow () 分隔,用于列和 Lower Case 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  

我收到以下错误:

消息 4832,16 级,状态 1,201 行
批量加载:在数据文件中遇到了意外的文件结尾。

消息 7399,16 级,状态 1,201 线
链接服务器“(null)”的 OLE DB 提供程序“BULK”报告了错误。提供者没有提供有关错误的任何信息。

消息 7330,16 级,状态 2,201 线
无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”中获取行。

注意:我还尝试将 FMT 文件中的最后一行更改为“þ\r\n”,但这不起作用。

任何建议将不胜感激。

谢谢。

【问题讨论】:

  • @vitaut:不知道为什么会被否决?你能提供一些澄清吗?谢谢。
  • 不要在记事本中查看文件。您需要使用更好的文本编辑器/查看器。正如我在下面的解决方案中所述,“这假设每行的最后两个字节确实是 \r\n”。您可以使用诸如 ultraedit 或 Notepad++ 之类的东西查看文件吗?会显示隐藏字符的东西(可能需要通过选项启用它们的视图)。
  • 将“þ”添加到您的行终止符确实“有效”。你真的需要那个。但还有其他问题。

标签: sql-server bulkinsert bcp


【解决方案1】:

使用格式文件加载带有这些特定字符作为分隔符的文件似乎非常困难。您可以尝试使用以下方法加载文件(需要一些额外的工作):

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

结果:

【讨论】:

  • 谢谢。是的,我得到了很多这些文件类型。我想我需要一种快速的方法将这些文件导入 SQL,而不必通过 SSMS 导入每个文件 - 认为 BULK INSERT 将是一种方法。
  • @Craig 是的,您可以循环浏览文件(使用xp_dirtree)并一次性加载这些文件。
【解决方案2】:

您只需要添加到您的行终止符.. 最后一个字段终止符。 您的行没有被两个字节“\r\n”终止... 它以三个字节结束......“小写荆棘(þ)\r\n”

这假设每行的最后两个字节确实是\r\n 您遇到的错误常见于不正确的行终止符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多