Массовое создание записей

Подскажи, как можно сделать массовое добавление записей?

У меня есть таблица, в ней есть записи, мне нужно по фильтру выбрать записи которых нет во второй таблице, потом отфильтровать по городу, и указать что нужно определенное количество записей из каждого указанного города записать в другую таблицу.

Код выполняется на сервере, в конфигурационном сервисе.

Нравится

3 комментария

Александр, у элемента вставки в БП есть возможность вставлять выборку из другого объекта с нужным фильтром.

Из того, что Вы хотите, нет разве что указания количества. Возможно, получится через 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 без разных колонок, чтобы выяснить, в какой из них дело.

Показать все комментарии