有什么方法可以使用 Bulk Insert 语句并禁用 MAXERRORS?
我想允许无限数量的错误,因为我批量插入的文件中的错误数量可能很高(我无法控制此文件,目前正在与供应商合作解决他们的问题在某些行上)。
如果没有办法禁用它,MAXERRORS 可以处理的最大数量是多少?是 2147483647 吗?
有什么方法可以使用 Bulk Insert 语句并禁用 MAXERRORS?
我想允许无限数量的错误,因为我批量插入的文件中的错误数量可能很高(我无法控制此文件,目前正在与供应商合作解决他们的问题在某些行上)。
如果没有办法禁用它,MAXERRORS 可以处理的最大数量是多少?是 2147483647 吗?
通常,当我从外部来源导入数据时,我非常警惕数据中的问题。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 中,我总是有以下列:
这些提供有关通常有用的数据的跟踪信息。