Ошибка оператора обновления: подзапрос вернул более 1 значения - PullRequest
2 голосов
/ 02 ноября 2009

Я пытаюсь обновить все записи в столбце, чтобы они начинались с 'CD', например DCE206 станет CDE206.

UPDATE table
SET column = REPLACE(column1, 'DC', 'CD')
WHERE column1 LIKE 'DC%'

Я использую приведенное выше заявление об обновлении, однако появляется следующая ошибка

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

Могу ли я что-нибудь изменить в выражении, чтобы это произошло, или мне нужно изучить курсор.

Я использую SQL Server 2000.

Ответы [ 5 ]

9 голосов
/ 02 ноября 2009

Вы не можете получить эту ошибку из этого кода. Ошибка msut от другой части кода.

У вас есть что-нибудь, чем работает при обновлении? Триггер?

2 голосов
/ 02 ноября 2009

Сообщение, которое вы опубликовали , не будет генерировать эту ошибку: у него нет подзапроса.

0 голосов
/ 02 ноября 2009

Если вы получаете ошибку, которую вы указываете из простого UPDATE, то, скорее всего, у вас есть триггер UPDATE в таблице, и ошибка исходит от триггера.

Однако код, который вы разместили, определенно не тот код, с которым у вас возникли проблемы, потому что «таблица» является ключевым словом и не может быть именем таблицы, которую вы обновляете.

0 голосов
/ 02 ноября 2009

У вас, похоже, опечатка. Должно быть:

"SET column1 ="

вместо

"SET column ="

(отсутствует «1»)

0 голосов
/ 02 ноября 2009

Мне кажется, это нормально работает, 2005. Является ли это частью пакета запросов, возможно, другое сообщение вызывает это сообщение?

Изменить: Выполнено это на SQL 2000, без ошибок.

create table table1 (id int identity, column1 varchar(10))

insert into table1 values ('DCE1')
insert into table1 values ('DCE2')
insert into table1 values ('DCE3')
insert into table1 values ('DCE4')
insert into table1 values ('DCE5')

UPDATE table1
SET column1 = REPLACE(column1, 'DC', 'CD')
WHERE column1 LIKE 'DC%'

select * from table1 
drop table table1
...