У меня есть процедура, которая сохраняет ответы от пользователей, которые отвечают на опрос. В моей базе данных есть 3 таблицы SurveyData, SurveyQuestions и SurveyAnswers.
SurveyData хранит данные от пользователя
IdData || Name || Ocupation
SurveyQuestions содержит все доступные вопросы
IdQuestion || Question
1 || question 1
2 || question 2 ...
И SurveyAnswers, в котором хранятся ответы пользователя
IdData || IdQuestion || Answer
У меня есть 10 вопросов в моей базе данных, и я хочу, чтобы StoredProcedure вставлял в столбец IdQuestion значения от 1 до 10, и когда другой пользователь отвечает, чтобы перезапустить это число от 1 до 10 снова
Это мой текущий SP
USE [Surveys]
GO
/****** Object: StoredProcedure [usurvey].[InsertSurvey] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [usurvey].[InsertSurvey] @Name varchar(50), @Ocupation varchar(50), @replies varchar(2000)
as begin
DECLARE @idData int
declare @posreply int
declare @reply varchar(20)
begin
INSERT INTO SurveyData(Name,Ocupation)
VALUES (@Name,@Ocupation)
SET @idData=(SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY])
end
if (@replies <> '')
begin
while PATINDEX ('%|%', @replies) <> 0
begin
select @posreply = PATINDEX('%|%',@replies)
select @reply = left(@replies,@posreply -1)
insert into SurveyAnswers (idData, idQuestion, Answer)
select @idData,ROW_NUMBER() OVER (order by (select null)),@reply
select @replies = STUFF(@replies, 1, @posreply,'')
end
end
END
Когда я выполняю SP
exec InsertarSurvey @Name = 'john', @Ocupation = 'teacher' , @respuestas = 'almost never|never|always|'
Это результат о выполнении
IdData || IdQuestion || Answer
1 || 1 || almost never
1 || 1 || never
1 || 1 || always
И вот результаты, которые я хочу получить
IdData || IdQuestion || Answer
1 || 1 || almost never
1 || 2 || never
1 || 3 || always
И если кто-то еще завершит опрос
IdData || IdQuestion || Answer
1 || 1 || almost never
1 || 2 || never
1 || 3 || always
2 || 1 || never
2 || 2 || never
2 || 3 || almost always