Скрипт для быстрого заполнения таблиц

Каким образом можно быстро заполнить все детали выбранных записей одной и той же информацией?
В частности, добавить одну группу сервисных инженеров на детали определенного количества сервисов?

Спасибо.

Нравится

8 комментариев

Добавьте автоматизированное действие, которое будет представлять собой БП с элементом "Добавление данных" ( или "Изменение данных", в зависимости от задачи). Выбранные записи реестра будут передаваться через параметр "Выбранная запись раздела".

insert into ServiceTeam(ProcessListeners, ContactId, SysAdminUnitId, ServiceId)
select 0, null, s.Id, ss.Id from Contact c, SysAdminUnit s, [Service] ss
where s.Name = 'Группа' 
and (ss.ServiceName = 'сервис1' or ss.ServiceName = 'сервис2' or ss.ServiceName = 'сервис3')

Вот только мне кажется что должно быть GroupId и Group вместо ContactId и Contact...

Попробуйте так:

declare @GroupName nvarchar(250)
set @GroupName = '3-я линия поддержки'
declare @AdminUnitID uniqueidentifier
set @AdminUnitID = (select top 1 ID from SysAdminUnit where Name = @GroupName)
 
 
INSERT INTO ServiceTeam(Id, 
SysAdminUnitId,
DisplayValue,
ServiceId)
select newid(), @AdminUnitID, @GroupName, SS.Id 
from Service SS
where (ss.ServiceName = 'сервис1' or ss.ServiceName = 'сервис2' or ss.ServiceName = 'сервис3')

Есть ли возможность оптимизировать скрипт?

INSERT INTO ServiceTeam(ProcessListeners, 
ContactId, SysAdminUnitId, ServiceId, DisplayValue)
SELECT DISTINCT 0, null, s.Id, ss.Id, s.Name
FROM SysAdminUnit s, [Service] ss
 
WHERE (
s.Name = 'Команда абонентской службы и бухгалтерии' or
s.Name = 'Команда поддержки биллинга')
 
AND (ss.CategoryId in (select Id from CategoryOfService cs where cs.Name = 'Тех. поддержка абонентов'))
AND (ss.ServiceParentId in (select Id from [Service] sss 
 
where (
sss.ServiceName = 'Тарификация' or 
sss.ServiceName = 'Платежи' or	
sss.ServiceName = 'Блокировка/Разблокировка')))
 
OR ((
s.Name = 'Команда абонентской службы и бухгалтерии' or 
s.Name = 'Команда поддержки биллинга') 
 
AND ss.Id in (select Id from [Service] ssss 
 
where (
ssss.ServiceName = 'Тарификация' or 
ssss.ServiceName = 'Платежи' or 
ssss.ServiceName = 'Блокировка/Разблокировка')))

Скажите, Наталия, а какой способ предпочтительнее - предложенный Вами в первом посте или все-таки скрипт??

Разница заключается в том, что первый способ позволяет любому пользователю добавить данные из приложения BPMonline воспользовавшись действием.
Второй способ предполагает наличие доступа к СУБД, навыков работы с запросами (чем не обладают пользователи).
Какой из способов предпочтительнее зависит от того, следует добавить данные единоразово или регулярно. Если разово – лучше использовать скрипт.

Наталия, понятно.

Что касается скрипта, я все-таки переспрошу и детализирую вопрос

AND (ss.ServiceParentId IN (SELECT Id FROM [Service] sss 
 
WHERE (
sss.ServiceName = 'Тарификация' OR 
sss.ServiceName = 'Платежи' OR   
sss.ServiceName = 'Блокировка/Разблокировка')))

Можно ли обойтись без этого повторного запроса к Service?

Ещё один вопрос. Если я хочу при помощи скрипта добавить множество сервисов в какой-то пакет сервисов, какие таблицы и поля нужно заполнить в обязательном порядке?

Насколько я разобрался, это

Таблицы:

ServiceInServicePackage

Поля ServiceInServicePackage:

ServicePackageId
ServiceId

И правильно ли будет просто очистить таблицу ServiceInServicePackage, если я хочу, чтобы ни один сервис не состоял ни в одном пакете?

Спасибо!

да, верно.

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