Первая попытка курсора, так что успокойтесь = P Курсор должен захватить список идентификаторов компаний, которые все находятся в зонтичной группе.Затем настройте таргетинг на конкретную компанию и скопируйте ее записи рабочего процесса в компании в курсоре.
Он бесконечно вставляет эти записи рабочего процесса во все компании ... в чем здесь проблема?
Где ошибка n00b?
DECLARE @GroupId int = 36;
DECLARE @CompanyToCopy int = 190
DECLARE @NextId int;
Declare @Companies CURSOR;
SET @Companies = CURSOR FOR
SELECT CompanyId
FROM Company C
INNER JOIN [Group] G
ON C.GroupID = G.GroupID
WHERE C.CompanyID != 190
AND
G.GroupId = @GroupId
AND
C.CompanyID != 0
OPEN @Companies
FETCH NEXT
FROM @Companies INTO @NextId
WHILE (@@FETCH_STATUS = 0)
BEGIN
INSERT INTO COI.Workflow(CompanyID, EndOfWorkflowAction, LetterType, Name)
(SELECT
@NextId,
W.EndOfWorkflowAction,
W.LetterType,
W.Name
FROM COI.Workflow W)
FETCH NEXT
FROM @Companies INTO @NextId
END
CLOSE @Companies;
DEALLOCATE @Companies;
Редактировать:
Я решил попытаться сделать этот набор на основе только потому, что после того, как мне сказали сделать это ... Я понялУ меня действительно не было ответа относительно того, как сделать это как основанный на множестве запрос.
Спасибо всем за помощь всем.Я выложу версию для потомков.
INSERT INTO COI.Workflow(CompanyID, EndOfWorkflowAction, LetterType, Name)
(
SELECT
CG.CompanyId,
W.EndOfWorkflowAction,
W.LetterType,
W.Name
FROM COI.Workflow W
CROSS JOIN (SELECT C.CompanyID
FROM Company C
INNER JOIN [Group] G
ON G.GroupID = C.GroupID
WHERE C.CompanyID != 190
AND
C.CompanyID != 0
AND
G.GroupID = 36
) AS CG
WHERE W.CompanyID = 190
)