2015-06-10 76 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