ОК, это должно работать:
**
Смотри, мама, без петель!:
**
declare @checklist_id INT;
SET @checklist_id = 99 -- ??
declare @index INT, @values VARCHAR(MAX);
SET @index=0
SET @values = 'at your primary grocery store^at WalMart or Sam''s Club^at any other chain (e.g. Target, K-Mart)^in general'
-- make sure all substring are bounded on both sides
IF SUBSTRING(@values, LEN(@values), 1) <> '^' SET @values = @values + '^'
IF LEFT(@values,1) <> '^' SET @values = @values + '^'
;WITH cteNumbers AS
(
SELECT ROW_NUMBER() OVER(ORDER BY object_id) as N
FROM master.sys.system_columns --just a convenient source of rows
)
, cteValues AS
(
SELECT SUBSTRING(@values, N+1, CHARINDEX('^', @values, N+1)-1) as value
, ROW_NUMBER() OVER(ORDER BY N) AS qnum
FROM cteNumbers
WHERE N < LEN(@values)
AND SUBSTRING(@values, N, 1) = '^'
)
INSERT INTO checklist_questions (
checklist_id
,checklist_question_id
,checklist_answer_category_id
,autofail_flag
,checklist_responsible_type_id
,correction_days
,checklist_question_header_id
,question
)
SELECT
@checklist_id
,qnum --question #
,40 --answer category id
,0 --autofail flag
,'P' --checklist_responsible_type_id
,27 --correction_days
,4 --correction_days
,'How much do you spend <b>'+ value +'</b> per trip compared to this time last year?'
FROM cteValues;
;WITH cteNumbers AS
(
SELECT ROW_NUMBER() OVER(ORDER BY object_id) as N
FROM master.sys.system_columns --just a convenient source of rows
)
, cteValues AS
(
SELECT SUBSTRING(@values, N+1, CHARINDEX('^', @values, N+1)-1) as value
, ROW_NUMBER() OVER(ORDER BY N) AS qnum
FROM cteNumbers
WHERE N < LEN(@values)
AND SUBSTRING(@values, N, 1) = '^'
)
INSERT INTO checklist_answers (
checklist_id
,checklist_question_id
,checklist_answer_category_id
,checklist_answer_type_id
,detail_flag
)
SELECT
@checklist_id
,qnum --question number
,38 --category
, N --answer type
,0 --detail flag
FROM cteValues AS v
CROSS JOIN (SELECT N FROM cteNumbers WHERE N <= 6) AS num;