【问题标题】:SQL update statement:Subquery returned more than 1 valueSQL更新语句:子查询返回超过1个值
【发布时间】:2015-06-10 20:24:49
【问题描述】:

我有一个名为 dbo.Movies 的表,现在我想更新 3 行

此语句仅适用于一条记录

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 行 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。"

如何修复此查询以更新 3 行或更多行?

【问题讨论】:

  • 我猜你想避免负价格。在这种情况下,删除 if 并添加 and Price &gt;= @price 以更新 where 子句中的查询。

标签: sql sql-server-2012


【解决方案1】:

你的错误在这里:

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

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 2015-01-08
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2015-08-06
    • 1970-01-01
    相关资源
    最近更新 更多