커서에서 처음 시도하므로 쉽습니다 = P 커서는 우산 그룹 아래에있는 회사 ID 목록을 가져옵니다. 그런 다음 특정 회사를 대상으로 커서의 회사에 워크 플로우 레코드를 복사하십시오.커서가 무한 루프에 걸렸습니다
이 워크 플로 레코드를 모든 회사에 무한대로 삽입합니다 ... 여기에 어떤 문제가 있습니까?
어디에서 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
)
커서를 사용할 필요가 없습니다. 가능한 한 그들을 피하십시오. –
@Mitch가 맞습니다. 임시 큐를 제외한 모든 큐에 커서를 사용하지 마십시오. 속도가 느리고 많은 자원을 소비하며 신속하게 교착 상태가 발생할 수 있습니다. –
타이를위한 조언. 그러나 이것은 내가 그들을 배울 핑계로 사용하고있는 고의적 인 문제 일뿐입니다. 이를 염두에두고 문제가 무엇입니까? –