#sql #sql-server #command #load
Вопрос:
У меня была команда SQL, которая работала без каких-либо проблем. Однако сегодня команда, казалось, перестала работать. Он просто загружается без завершения.
DECLARE @varVKA VARCHAR(20)
SELECT TOP 1 @varVKA = t.AufNr
FROM TABLE AS t
WHERE RStatus = '10'
Order By AufNr asc
UPDATE TABLE
SET RStatus = '30' WHERE AufNr = @varVKA
Я немного поработал над устранением неполадок, и единственное, что я заметил, — это то, что, когда я меняю ВЕРХНЮЮ часть на любую другую сумму, результаты почти мгновенны.
Что могло измениться, чтобы ТОП-1 не работал? Команда работает без проблем уже более года.
Комментарии:
1. Почему вы используете два оператора и переменную, когда для этого можно использовать один
update
? Также пометьте базу данных, которую вы используете.2. @GordonLinoff Я написал это как два заявления и обновление, потому что я не знал, как поместить все это в одно заявление об обновлении. Поскольку с запуском не было никаких проблем, я оставил его настолько простым и понятным для меня, насколько мог, вместо того, чтобы копировать и вставлять одно большое обновление, которое я не понял. Я полностью за обучение, поэтому я обязательно рассмотрю возможность оптимизации команды. С обновленным тегом все в порядке?
Ответ №1:
Если вы хотите обновить только одну строку, вы можете сделать:
UPDATE t
SET RStatus = '30'
FROM (SELECT TOP 1 t.*
FROM TABLE t
WHERE RStatus = '10'
ORDER BY AufNr ASC
) t;
Комментарии:
1. Огромное спасибо за эту помощь
2. Спасибо за ответ! Мне это было нужно для каждой позиции с конкретным AufNr. Тем не менее, мы очень ценим вашу помощь и предложения.
Ответ №2:
Немного поэкспериментировав, я думаю, что нашел решение. Я все еще не уверен, почему ошибка произошла без сбоев в течение как минимум года, но, возможно, это как-то связано с «TOP 1 AufNr» и «ЗАКАЗ ПО AufNr asc».
Как только я заменил «ЗАКАЗАТЬ ПО» на «минимум», что, похоже, работает аналогично, команда снова работает.
Я также изучил то, что предложил @GordonLinoff, и, надеюсь, улучшил команду.
Теперь команда выглядит так:
UPDATE TableName
SET Rstatus = '30'
WHERE AufNr =(
SELECT min(AufNr)
FROM TableName
WHERE RStatus = '10')