簡體   English   中英

遍歷sql中的動態列表

[英]looping through a dynamic list in sql

我正在編寫一個存儲過程,以讀取動態的int值列表(該過程的參數)。 閱讀此列表后,我需要為列表中的每個值插入另一個表。 我不太擅長sql。 你能幫我么? 到目前為止,這是我所做的。

CREATE PROCEDURE [dbo].[FunctionInsert]
(
    @CONTEXTCODEID INTEGER,
    @MASTERCASEID INTEGER,
    @LETTERCODEIDS VARCHAR(50)
)
IF @LETTERCODEIDS  <> '0'
    BEGIN
    WITH cd AS
    (
        SELECT  1 AS first, CHARINDEX(',', @LETTERCODEIDS  , 1) AS next
        UNION ALL
        SELECT  next + 1, CHARINDEX(',', @LETTERCODEIDS  , next + 1)
        FROM    cd
        WHERE   next > 0
    ),
    lid AS
    (
        SELECT  CAST(SUBSTRING(@LETTERCODEIDS  , first, CASE next WHEN 0 THEN LEN(@LETTERCODEIDS  ) + 1 ELSE next END - first)AS INT) AS id
        FROM    cd
    )
    SELECT * FROM
    (
        SELECT  DISTINCT id
        FROM    lid
    ) l

如果我執行EXEC FunctionInsert(@LETTERCODEIDS ='1,2,3'),我將獲得id為1,2,3的值列表

現在,我需要遍歷這些並在另一個表中進行插入。

INSERT INTO [dbo].CaseLetters
(
    ContextCodeID,
    MasterCaseID,
    LetterCodeID

)
VALUES
(
    @CONTEXTCODEID,
    @MASTERCASEID ,
    --My values from the list need to go here       
)

我不確定如何進行。

當我發現自己想要遍歷SQL中的一組值時,我通常最終會使用游標。

假設您的存儲過程正在填充一個名為#tmp_id的表

DECLARE @ID INT

DECLARE my_cursor CURSOR FOR
SELECT ID FROM #tmp_id

OPEN my_cursor

FETCH NEXT FROM my_cursor INTO @ID

WHILE @@FETCH_STATUS == 0
BEGIN

    -- This is the body of the loop where your logic will go
    -- Every value in the set returned by SELECT ID FROM #tmp_id will
    -- Be bound to the variable @ID for one iteration of this loop

    FETCH NEXT FROM my_cursor INTO @ID
END

CLOSE my_cursor
DEALLOCATE my_cursor

讓我知道是否可以澄清任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM