Я пытаюсь отправить число и идентификаторы и обновить строки в цикле while.SQL Update in While Loop
Например, если @Number = 1
и
MAX(Number)
FROM QuestionnaireQuestions
WHERE Questionnaire_ID = @Questionnaire_ID = 4
Результаты значения 1, 1, 1, когда я ожидал бы 3,2,1.
CREATE PROCEDURE [dbo].[DeleteQuestion]
(@QuestionnaireQuestions_ID BIGINT,
@Questionnaire_ID BIGINT,
@Number SMALLINT)
AS
DECLARE @i AS SMALLINT
SELECT @i = MAX(Number)
FROM QuestionnaireQuestions
WHERE Questionnaire_ID = @Questionnaire_ID
WHILE (@i > @Number)
BEGIN
UPDATE QuestionnaireQuestions
SET Number = (@i - 1)
WHERE Number = @i
AND Questionnaire_ID = @Questionnaire_ID
SET @i = @i - 1
END
DELETE QuestionnaireQuestions
WHERE QuestionnaireQuestions_ID = @QuestionnaireQuestions_ID
Вы предлагаете использовать идентификатор строки, и если есть промежутки времени, то пусть у нас все еще есть заказ? Это определенно работает, но в моей сетке есть стрелки вверх и вниз вместе с возможностью удаления, поэтому я @Number (который действительно является номером сортировки). Я ценю, что вы нашли время, чтобы посмотреть на мою проблему. –
Правильно. Порядок остается, даже если последовательность не смежна. Ответ, который вы приняли, будет работать до тех пор, пока вы не позволите нескольким пользователям одновременно удалять строки в одной и той же анкете. Попытайтесь сохранить модель данных отдельно от вашего визуального макета. – Pekka