2015-06-24 2 views
0

Я пишу следующий запрос для обновления цены в таблице (PartsPricing):Update ошибка запроса

Update PartsPricing 
set ppPrice = CEILING((select PP.ppPrice from 
       #tmp_PartstoUpdate TPU join PartsPricing PP 
       on TPU.ppPartNumber = PP.ppPartNumber 
       where PP.ppConditionID = 9 and PP.ppDeleted = 0)*.5) 
where ppID in (select ppID from #tmp_PartstoUpdate) 

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

Msg 512, Level 16, State 1, Line 1 
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 
The statement has been terminated. 

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

ответ

1

Попробуйте вместо этого, это должно в принципе сделать то же самое:

Update PP 
set ppPrice = CEILING(PP.ppPrice * 0.5) 
FROM PartsPricing PP 
INNER JOIN #tmp_PartstoUpdate TPU 
     ON TPU.ppPartNumber = PP.ppPartNumber 
where PP.ppConditionID = 9 and PP.ppDeleted = 0 

Ваша проблема в том, что ваш подзапрос возвращает более одной строки, что приводит к SQL Server для отмены. Он не может умножать несколько строк с одним значением и назначать его другому (если вы не используете агрегацию).

+0

Это сработало. Благодаря! – jmClassic

+0

Если это решение проблемы, вы можете отметить ее как свой ответ для всех, кто ищет ту же проблему. :-) – Ionic

+0

Я изменил приведенный выше запрос, чтобы обновить Used Condition на основе используемой цены следующим образом: – jmClassic

Смежные вопросы