Обновление нескольких строк с использованием неравенства - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь обновить один столбец в подмножестве таблицы, но не могу понять, как это сделать чистым и эффективным способом.

Примите во внимание следующее:

// MyTable
id    name  flag
0     Steve 0
1     Bob   0
...
10500 Rick  0

Я хочу изменить flag на 1, но только для некоторых случаев.Я пытался использовать

UPDATE MyTable
SET flag = 1
WHERE id <= 500

Но очевидно, что это не работает, потому что подзапрос возвращает более одного значения.Технически, я мог бы сделать это так:

UPDATE MyTable SET flag = 1 WHERE id = 0
UPDATE MyTable SET flag = 1 WHERE id = 1
...
UPDATE MyTable SET flag = 1 WHERE id = 500

Но кто хочет сделать это так?:) Есть ли лучший способ для меня отформатировать этот запрос и обновить только те, которые соответствуют неравенству?

РЕДАКТИРОВАТЬ

Чтобы уточнить, что именно происходит: когда ясказать «некоторые из этих случаев» я имею в виду только те, которые соответствуют неравенству, в этом случае id <= 500

Когда я запускаю UPDATE MyTable SET flag = 1 WHERE id <= 500, я получаю следующую ошибку:

Subquery returned more than 1 value. 
This is not permitted when the subquery follows =, !=, <, <= , >, >=
    or when the subquery is used as an expression.

Ответы [ 3 ]

8 голосов
/ 20 декабря 2011

Поскольку в вашем запросе нет подзапроса, я подозреваю, что у вас есть плохо записанный триггер в таблице, который ожидает обновления только одной записи за раз. Это должно быть исправлено, поскольку в этом предположении не должно быть написано ни одного триггера. Триггеры в SQL Server должны выполнять только операции на основе набора, поскольку они работают со всем набором, а не с одной строкой за раз.

0 голосов
/ 20 декабря 2011

Ваш запрос должен работать, если это только тот запрос, он должен возвращать количество выполненных строк.

Длинная рука, которую вы написали, делает именно то, что делает ваш первый запрос.В какой среде вы его запускаете?

0 голосов
/ 20 декабря 2011

Это один из основных вариантов использования условных запросов (использование предложения where). Вы ищите способ уникальной идентификации строк строк, которые вы хотите изменить, и строите запрос на основе идентифицирующей информации. Ваша первоначальная попытка применяет эту концепцию, однако ваша таблица в том виде, как она построена, настолько общая, что составление адекватного запроса для выбора только соответствующей информации является трудным, если не невозможным. Возможно, попробуйте изменить таблицу, чтобы сделать данные более конкретными, предпочтительно путем разделения данных. Например, есть ли способ группировки данных, чтобы некоторые люди могли быть идентифицированы как «студенты» или «профессора» и т. Д.? Что на самом деле должен указывать флаг?

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