Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions mssql/operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,20 @@ def bulk_batch_size(self, fields, objs):
are the fields going to be inserted in the batch, the objs contains
all the objects to be inserted.
"""
objs_len, fields_len, max_row_values = len(objs), len(fields), 1000
if (objs_len * fields_len) <= max_row_values:
size = objs_len
else:
size = max_row_values // fields_len
return size
max_insert_rows = 1000
fields_len = len(fields)
if fields_len == 0:
# Required for empty model
# (bulk_create.tests.BulkCreateTests.test_empty_model)
return max_insert_rows

# MSSQL allows a query to have 2100 parameters but some parameters are
# taken up defining `NVARCHAR` parameters to store the query text and
# query parameters for the `sp_executesql` call. This should only take
# up 2 parameters but I've had this error when sending 2098 parameters.
max_query_params = 2050
# inserts are capped at 1000 rows regardless of number of query params.
return min(max_insert_rows, max_query_params // fields_len)

def bulk_insert_sql(self, fields, placeholder_rows):
placeholder_rows_sql = (", ".join(row) for row in placeholder_rows)
Expand Down