2015-06-10 75 views
1

我有一个名为dbo.Movies表,现在我想更新3行SQL更新语句:子查询返回多个值

这种说法只适用于一个记录

declare @movietype nvarchar(100) = 'Thriller' 
declare @price real = 10 
if @price < (select Price from dbo.Movies where MovieType = @movietype) 
begin 
update mo 
    set mo.Price = Price - @price 
FROM dbo.Movies as mo 
WHERE mo.MovieType = @movietype 
end 

但是当我尝试运行这个语句来更新这个3行,我得到错误

“消息512,级别16,状态1,行3 子查询返回多个值。当子查询跟随这是不允许的=,!=,<,< =,>,> =或者当子查询用作表达式时。“

我该如何修复这个查询来更新3行或更多行?

+2

我猜你想避免消极的价格。在这种情况下,删除'if'并添加'和Price> = @ price'来更新Where子句中的查询。 –

回答

3

你的错误就出在这里:

if @price < (select Price from dbo.Movies where MovieType = @movietype) 

你不能比较单一值(@price)多个值,你需要确保该子查询只返回一个。

另外,你也可以同样改写这样的命令:

UPDATE mo 
    SET mo.Price = Price - @price 
FROM dbo.Movies as mo 
WHERE mo.MovieType = @movietype 
    AND mo.Price > @Price