第一次嘗試遊標,所以很簡單= 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
)
你不需要使用遊標。儘可能避免它們。 –
@米奇是對的。避免使用遊標,除了特別的問題之外。它們速度很慢,耗費大量資源,並可能很快導致僵局。 –
Ty尋求建議。然而,這只是我用來學習它們的一個藉口。考慮到這一點,問題是什麼? –