[英]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.