Обновление таблицы в TSQL с несколькими условиями - PullRequest
0 голосов
/ 19 декабря 2010

Если у меня есть таблица MyTable со столбцами a, b и c, которые являются целыми числами.Учитывая, что я хочу обновить все 'a' на основе значений b и c.

Update MyTable set a = 2 where b = 1 and c = 1

Это слишком поздно, и я не могу на всю жизнь понять, почему это утверждение не работает, яЯ упустил что-то глупое?

Редактировать, woops, забыл ошибку.

"Подзапрос вернул более одного значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = или когда подзапрос используется в качестве выражения. "

Edit2: это был именно тот запрос, который я использовал (разные имена столбцов).Оказывается, на столе был триггер, который был сломан.Сейчас я чувствую себя немного глупо, но все равно спасибо за помощь:)

1 Ответ

3 голосов
/ 19 декабря 2010

В заявлении, которое вы опубликовали, нет ничего плохого.Ошибка в другом месте.

Не могли бы вы опубликовать неправильный запрос?Или, может быть, вы слишком упростили это?Подзапрос выглядит примерно так:

UPDATE MyTable
SET a = 2 
WHERE b = 1 AND c = (SELECT c FROM MyTable2 WHERE id = 5)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <--- subquery

Недопустимый запрос, который может выдать сообщение об ошибке, может выглядеть следующим образом:

UPDATE MyTable
SET a = 2 
WHERE b = 1 AND c = (SELECT c, d FROM MyTable2 WHERE id = 5)

Второй запрос недопустим, поскольку он возвращает двазначения, но оператор = позволяет сравнивать только одно значение.

Решение состоит в том, чтобы все подзапросы, используемые в сравнениях на равенство, возвращали только одну строку, состоящую из одного столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...