Mssql仍然批量插入类型不匹配错误

时间:2015-12-07 10:29:21

标签: sql sql-server sql-server-2008

Hy,

我正在使用批量插入来从数据库中的csv文件插入记录。在某些文件中,我有一个type mismatch or invalid character的字段,但SQL会插入除了那个之外的其他行。

Ex:包含7334行的文件(1行是类型不匹配) - >插入了7333行。

这是SQL的正常行为还是错误的。

1 个答案:

答案 0 :(得分:1)

是的,当您尝试将数据类型(在大多数情况下)插入到要插入数据的字段时,这是预期的行为。例如,如果您尝试将文本值插入整数字段,则会出现类型不匹配错误。

bigint列不允许您插入类似' 00:12:2A:3F'的值。首先检查您的源数据并验证该列是否实际具有值' 00:12:2A:3F'。如果没有,这可能是我在下面的说明中解释的原因。如果源数据的值准确,则可能必须将列定义更改为适当的数据类型,例如varchar()。

除非您强制 CHECK_CONSTRAINTS ,否则Sqlserver将跳过错误记录并插入其他符合记录。如果您希望插入失败时出现错误(例如类型不匹配),请在批量插入标记上使用 CHECK_CONSTRAINTS ,如下所示:

BULK INSERT DB.dbo.Test 
FROM '.....' 
WITH ( CHECK_CONSTRAINTS, .......)

注意: 要记住的一件事是数据本身没有被字段分隔符污染。例如,如果您的字段是由','分隔的。分隔符和其中一个字段在数据中有一个逗号(文本列中有'注释'可能有逗号),SQL服务器认为新列从那里开始并打破字段导致另一列为未对齐的。这可能是您的类型不匹配的原因。