Как обработать коллекцию с массовой вставкой через Insert обходя ограничение в 2100 записей параметров?
bool InsertTriangle(List<TriangleEntity> 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 параметров мы не можем.
В данной ситуацию правильным будет разбитие запроса на подзапросы, объединять результаты, и возвращать всю коллекцию по необходимости.
Замечу, что ваш вариант также имеет место.