Hy,
我正在使用批量插入来从数据库中的csv文件插入记录。在某些文件中,我有一个type mismatch or invalid character
的字段,但SQL会插入除了那个之外的其他行。
Ex:包含7334行的文件(1行是类型不匹配) - >插入了7333行。
这是SQL的正常行为还是错误的。
答案 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服务器认为新列从那里开始并打破字段导致另一列为未对齐的。这可能是您的类型不匹配的原因。