Я работаю над запросом, который я обновляю в пользовательской таблице, которая всегда имеет 1 строку (это часть гораздо большей операции). Эта таблица заполняется запросом из более крупной таблицы сотрудников на основе идентификатора сотрудника.Почему эти запросы возвращаются по-другому?
Этот запрос работает большую часть времени, но в некоторых случаях я получаю
«Subquery вернулся более чем на 1 значение. Это недопустимо, когда подзапрос следует за =,! =, <, < =,>,> = или когда подзапрос используется как выражение. '
погрешность.
Я не мог точно определить, почему, я пробовал заполнять значения с помощью выбора, и он возвращал только 1 результат.
Я был в недоумении, поэтому я попробовал ниже, и это сработало.
UPDATE @empInfo SET LastPromotionDate = ISNULL((
SELECT begindate
FROM performanceyear
WHERE (SELECT LastPromotionDate FROM @empinfo) BETWEEN begindate AND enddate
AND [FK_Function_ID] = (SELECT FunctionID FROM @empinfo)
AND Federal = (SELECT isFederal FROM @empinfo)
), LastPromotionDate)
Они определенно не выполняют одно и то же, но я чувствую, что здесь что-то не хватает. Почему один работает, а не другой? @empInfo имеет только одну строку.
Edit2:
Я, кажется, думал себя в угол на этом!
ОРИГИНАЛА запрос, который возвращается ошибка:
UPDATE @empInfo SET LastPromotionDate =
ISNULL((
SELECT begindate
FROM performanceyear
WHERE LastPromotionDate BETWEEN begindate AND enddate
AND performanceyear.[FK_Function_ID] = FunctionID
AND Federal = performanceyear.Federal)
,LastPromotionDate)
@empInfo был столбец «Federal» и так же «performanceyear», когда я посмотрел в план исполнения этого, он сравнивал ' «Высокий уровень». Поэтому я изменил имя @empInfo Federal isFederal, и оно сработало.
Причина, по которой мой другой тест вызывал проблему, был не из-за двух строк в @empinfo. Это произошло потому, что я запускал обновление, а затем обновлялся снова. Первое обновление заставило второго вернуть 2 результата от performanceyear.
Выполняется независимо, они работают.
С этим все сказано, что я все еще не знаю решения, которое будет работать без столбцов, являющихся разными именами, поскольку я не могу использовать псевдоним @empInfo в подзапросе обновления.
Добавлена каретку возвращается с надеждой очистить запрос. –
Намного лучше, спасибо. –
Ошибка кажется довольно четкой. Один из ваших подзапросов возвращает более 1 значения, и вы не можете сравнить столбец с одним значением. Вы уверены, что @empinfo имеет только 1 строку - ошибка указывает на другое. –