Как обработать коллекцию с массовой вставкой через Insert обходя ограничение в 2100 записей параметров?
bool InsertTriangle(List triangleEntities) {
var insert = new Insert(_systemUserConnection).Into("TrianglePlanFact");
var counter = 0;
var insertLimit = 100;
var rowNumber = HaleonSqlHelper.GetRowCount(_systemUserConnection, "nbcTrianglePlanFact");
var mask = (string)SysSettings.GetValue(_systemUserConnection, "TriangleMask");
CollectionUtilities.ForEach(triangleEntities, item => {
var product = item.ProductEntity;
counter++;
rowNumber++;
var number = string.Format(mask, rowNumber);
insert.Values()
.Set("Name", Column.Parameter(number))
.Set("ProductGMMId", Column.Parameter(product.ProductId))
.Set("MaterialDescription", Column.Parameter(product.Brand))
.Set("Brand", Column.Parameter(product.Brand))
.Set("Plant", Column.Parameter(product.Plant))
.Set("Sku", Column.Parameter(product.Sku))
.Set("Period", Column.Parameter(item.Period))
.Set("Version", Column.Parameter(item.Version));
if (counter % insertLimit == 0) {
insert.Execute();
insert.ResetParameters();
}
});
if (counter % insertLimit != 0) {
insert.Execute();
}
return true;
}Код выше работает с коллекцией записей, добавляя значеия колонок в общую коллекцию для вставки, после того как достигли лимита в 100 записей при вставке, он выполняет инсерт и очищает параметры(я так думал), но я все равно ухожу в лимит 2100 при 300 записях, т.е 800 * 3 = 2400, как после каждого execute очищать параметры и как правильно делать подобные вставки?
Нравится
единственное решение, которое смог найти, это каждый раз пересоздавать insert, но хотелось бы узнать, как такое делать правильно
if (counter % insertLimit == 0) {
insert.Execute();
insert = new Insert(_systemUserConnection).Into("TrianglePlanFact");
}
ResetParemeters почему то не работает для моего случая, также я пытался изначально делать условие проверяя сами параметры в инсерте, но они всегда были 0Добрый день!
Как либо повлиять на ограничение в 2100 параметров мы не можем.
В данной ситуацию правильным будет разбитие запроса на подзапросы, объединять результаты, и возвращать всю коллекцию по необходимости.
Замечу, что ваш вариант также имеет место.