2

有什么方法可以使用 Bulk Insert 语句并禁用 MAXERRORS?

我想允许无限数量的错误,因为我批量插入的文件中的错误数量可能很高(我无法控制此文件,目前正在与供应商合作解决他们的问题在某些行上)。

如果没有办法禁用它,MAXERRORS 可以处理的最大数量是多少?是 2147483647 吗?

4

1 回答 1

2

通常,当我从外部来源导入数据时,我非常警惕数据中的问题。SQL Server 提供了多种解决方案。许多人使用 SSIS。我避免使用 SSIS。原因之一是让它打开用户已经打开的 Excel 文件。它还有一些其他的缺点。

无论如何,一旦数据在文本文件中,我将创建一个临时表,其中包含原始表的所有列,数据类型为varchar(8000). 这往往比必要的要大,但应该足够了。

然后,我创建一个包含适当列的表,并使用以下内容填充它:

insert into RealTable (CharColumn, IntColumn, FloatColumn, DateTimeColumn)
    select CharColumn,
           (case when isnumeric(IntColumn) = 1 and IntColumn not like '%.%' then cast(IntColumn as int end),
           (case when isnumeric(FloatColumn) = 1 then cast(FloatColumn as float) end),
           (case when isdate(DateColumn) = 1 then cast(DzteColumn as date)
    from StagingTable st

也就是说,我在 SQL 代码中进行类型检查,使用case语句来避免错误。当类型不匹配时,结果为 NULL 值。然后我可以使用 StagingTable 调查数据库中的值以了解任何问题。

此外,在 RealTable 中,我总是有以下列:

  • RealTableId int 身份(1,1)
  • CreatedBy varchar(255) 默认系统用户,
  • CreatedAt datetime 默认 getdate()

这些提供有关通常有用的数据的跟踪信息。

于 2013-01-16T14:51:15.857 回答