I wish to loop through two comma-separated values and perform an insert
As an example lets consider two variables
Declare @Qid= 1,4,6,7,8 @Answers = 4,4,3,2,3
set @pos = 0
set @len = 0
WHILE CHARINDEX(',', @Answers, @pos+1)>0
BEGIN
set @len = CHARINDEX(',', @Answers, @pos+1) - @pos
set @value = SUBSTRING(@Answers, @pos, @len)
insert into table values(@fdid,@Qid,@fusid, @value) -- i need Qid also
set @pos = CHARINDEX(',', @Answers, @pos+@len) +1
END
Using this loop I am able to extract @Answers
and can perform insert. But I wish to extract @Qid
and insert inside the loop.
edit for more clarity it is a feedback module. my result table have Qid and Answer field. Answers are ratings (1 to 5). The values we get in variables @Qid and @Answers are sequential. which means 1st answer will be for 1st question and so on.
edit
as per Shnugo's Answer
Declare @Qid varchar(100)= '1,4,6,7,8', @Answers varchar(100)= '4,4,3,2,3'
DECLARE @tbl TABLE(ID INT IDENTITY, Questions VARCHAR(100),Answers VARCHAR(100));
INSERT INTO @tbl VALUES(@Qid,@Answers)
INSERT INTO table(FeedbackId,QuestionId,FeedbackUserId,Answer)
SELECT 1,
A.qXml.value('(/x[sql:column("B.QuestionCount")])[1]','int') AS QuestionNumber,3
,A.aXml.value('(/x[sql:column("B.QuestionCount")])[1]','int') AS AnwerNumber
FROM @tbl t
CROSS APPLY(SELECT CAST('<x>' + REPLACE(@Qid,',','</x><x>') + '</x>' AS XML)
,CAST('<x>' + REPLACE(@Answers,',','</x><x>') + '</x>' AS XML)) A(qXml,aXml)
CROSS APPLY(SELECT TOP(A.qXml.value('count(/x)','int')) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM master..spt_values) B(QuestionCount)