常见问题
- 构建批量插入语句时必须注意SQL注入风险。
通过使用占位符和参数绑定,而非直接拼接用户输入的值。多行VALUES语句通过占位符"?"和参数列表插入数据,从而避免注入攻击。所有的动态数据都应作为参数传递,例如使用数据库对象*DB的接口Prepare或Exec等接口传入可变参数形式。
- 批量插入执行失败问题定位。
在批量插入操作中,如果某条记录插入失败,数据库通常只会返回整体错误信息(如主键冲突、外键约束或数据类型不匹配),而无法具体指示是哪一条记录导致了问题发生。如果一条SQL语句中包含多条记录,其中一条记录插入失败,整个事务可能会失败(如果启用了错误忽略机制则不会失败)。因此,如果需要定位出错的数据行,常用做法是将批量分成更小的批次或逐行插入并捕获错误。
-
构建批量插入的SQL语句时,如果数据量过大,会导致内存占用显著增加。尤其是当使用字符串拼接方式构建SQL语句时,内存消耗可能会急剧上升。过大的批量处理可能导致超出数据库或GO驱动的最大SQL长度限制,或者触发其他参数限制,进而引发错误或性能问题。