在 MSSQL 中处理 315 个批次后,BULK INSERT 命令在没有任何 error/exception 的情况下静默退出
BULK INSERT command is silently exiting without any error/exception after processing 315 batches in MSSQL
我将相当大的数据集(十亿行)存储到 MSSQL Server 2008 R2
table 中。使用 BCP
命令将数据推送到 table。
但是BCP只是在处理完315 batches
后静默退出,我用different batch size (1 record per batch, 100 record per batch, 1000 record per batch, 1000000 record per batch)
测试过。
但是不依赖batch size,处理完就退出315 batches
.
正在使用 python pyodbc
执行 BCP
命令。
我不知道为什么会这样。我应该采取什么方法来解决这个问题?对此的支持将非常有帮助。
- 问题与数据库游标对象有关。
- 这背后的根本原因是数据库游标对象已满,我不得不像遍历游标对象一样进行分页。
- 因为游标是我无法捕获存储过程的最新输出。在我的例子中,我的光标在 315 之后变满了(来自存储过程的 return 语句。插入语句的示例输出,如
10 rows inserted
)。
示例python代码
import pyodbc
conn = pyodbc.connect(username, password)
query = "a stored procedure"
# Execute query and get cursor object
cursor = conn.execute(query)
# Clearing cursor
while cursor.nextset():
result = cursor.fetchall() if cursor.description else None
我将相当大的数据集(十亿行)存储到 MSSQL Server 2008 R2
table 中。使用 BCP
命令将数据推送到 table。
但是BCP只是在处理完315 batches
后静默退出,我用different batch size (1 record per batch, 100 record per batch, 1000 record per batch, 1000000 record per batch)
测试过。
但是不依赖batch size,处理完就退出315 batches
.
正在使用 python pyodbc
执行 BCP
命令。
我不知道为什么会这样。我应该采取什么方法来解决这个问题?对此的支持将非常有帮助。
- 问题与数据库游标对象有关。
- 这背后的根本原因是数据库游标对象已满,我不得不像遍历游标对象一样进行分页。
- 因为游标是我无法捕获存储过程的最新输出。在我的例子中,我的光标在 315 之后变满了(来自存储过程的 return 语句。插入语句的示例输出,如
10 rows inserted
)。
示例python代码
import pyodbc
conn = pyodbc.connect(username, password)
query = "a stored procedure"
# Execute query and get cursor object
cursor = conn.execute(query)
# Clearing cursor
while cursor.nextset():
result = cursor.fetchall() if cursor.description else None