2012-07-05 33 views
0

我更熟悉Oracle,因此SQL Server 2008的语法正在抛出我。我试图执行与查询相当于多行的更新使用select子查询进行TSQL批量更新

update Table 
set type = 'typeA' 
where id in 
(select id from Table where type='typeB') 

我收到以下错误:

Msg 512, Level 16, State 1, Procedure Assigned_To_Email, Line 19 
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 

搜索一个TSQL具体的解决办法我试过下面的语法却收到同样的错误。

update a 
set type = 'typeA' 
from Table a 
join Table b 
on a.id = b.id 
where b.type='typeB' 

我读过子查询的更新应该可以工作,但这不是我的经验。这里有更基本的失踪吗? 感谢您的帮助!

+0

您收到的错误不是来自您在此处包含的查询。我认为你已经简化了你的实际查询。我的猜测是,您使用子查询来获取您分配给键入的值或您与类型比较的值,并且它是由于它返回多行而产生错误的子查询。 – 2012-07-05 15:40:59

+0

是的,子查询返回多个行,但这不是(不应该)是一个错误......但是,你是对的,这个问题与一个触发器有关,该触发器正在执行一个由于多行而出错的语句。我感谢您的评论,因为它将我引向实际问题。谢谢。 – McArthey 2012-07-06 16:12:01

回答

2

您的更新语句没有使用子查询或加入。

update Table 
set type = 'typeA' 
where type = 'typeB'