Подскажи, как можно сделать массовое добавление записей?
У меня есть таблица, в ней есть записи, мне нужно по фильтру выбрать записи которых нет во второй таблице, потом отфильтровать по городу, и указать что нужно определенное количество записей из каждого указанного города записать в другую таблицу.
Код выполняется на сервере, в конфигурационном сервисе.
Нравится
Александр, у элемента вставки в БП есть возможность вставлять выборку из другого объекта с нужным фильтром.
Из того, что Вы хотите, нет разве что указания количества. Возможно, получится через view с привязанным объектом, там в SQL-запросе можно сразу прописать и фильтр, и количество.
Ну или всю логику и считывания, и вставки реализовать в C#-скрипте с использованием классов ESQ или Select и Insert.
Зверев Александр, Реализовать надо в сервисе, выходит только через Select
Query selectQuery = new Select(UserConnection).Top(numberCountForNumberPool) .Column(Column.Parameter(request)).Column(Column.Parameter(currentUserContactId)) .Column(Column.Parameter(currentUserContactId)) .Column("KtSimManagementInitialPoolNumbers", "KtIccid") .Column("KtSimManagementInitialPoolNumbers", "KtImsi") .Column("KtSimManagementInitialPoolNumbers", "KtMsisdn") .Column("KtSimManagementInitialPoolNumbers", "KtName") .Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue<Guid>(city.Name))) .Column(Column.Parameter(cityAndCountNumbersEntity.GetTypedColumnValue<string>(note.Name))) .Column(Column.Parameter(DateTime.UtcNow.Date)) .Column(Column.Parameter(DateTime.UtcNow.Date .AddDays((int)Core.Configuration.SysSettings.GetValue(UserConnection, "DayCountForDedicatedPoolNumbers") + 1).AddSeconds(-1))) .From("KtSimManagementInitialPoolNumbers") .OrderByAsc("KtSimManagementInitialPoolNumbers", "KtName") .Join(JoinType.LeftOuter, "KtJasperFullNumberPool") .On("KtSimManagementInitialPoolNumbers", "KtName") .IsEqual("KtJasperFullNumberPool", "KtName") .Where("KtJasperFullNumberPool", "KtName") .IsNull() .And("KtSimManagementInitialPoolNumbers", "KtMarketCodeId") .IsEqual(Column.Parameter(cityForMarketCode)); InsertSelect insertSelectQuery = new InsertSelect(UserConnection) .Into("KtJasperFullNumberPool") .Set("KtRequestId", "ModifiedById", "CreatedById", "KtIccid", "KtImsi", "KtMsisdn", "KtName", "KtCityId", "KtNote", "KtReserveDate", "KtReserveToDate") .FromSelect(selectQuery); int numberCountInserted = insertSelectQuery.Execute();
И все работает отлично, но на PostgreSQL, при установке на версию для Oracle ругается
"ERROR IIS APPPOOL\CreatioCRMOracle Terrasoft.Web.Common.ServiceModel.ErrorHandler ProvideFault - Псевдоним колонки запроса не может быть пустым".
Что бы понятно было - конфигурации полностью одинаковые, просто dev среда на PostgreSQL а Prod на Oracle. И вот найти проблему тут уже не как не выходит
А на какое именно место в коде ругается? Если просто Select, без Insert, то тоже? Попробуйте последовательно запускать Select без разных колонок, чтобы выяснить, в какой из них дело.