选择有效,但类比更新不想

时间:2013-10-16 14:18:02

标签: sql sql-server

我是sql的新手,我遇到了一个问题。

我必须根据三列中的值更新最近添加的列。如果它与其他表中的相应列相同,则它必须根据其他表中的值更新此列。

这是我到目前为止所尝试的

update a 
set a.id = ( select top 1 b.id from OtherTable b 
     where b.k='Doz' and b.year = a.year and b.number = a.number)
from ThisTable a 

这是错误信息:

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

如果我使用top 1,怎么可能有多行呢?

我的另一个尝试:

update a 
set a.id = b.id
from ThisTable a
inner join OtherTable b
on b.k = 'Doz' and a.year = b.year and a.number = b.number

仍有问题。

如果我这样做:

select b.id
from ThisTable a
inner join OtherTable b
on b.k = 'Doz' and a.year = b.year and a.number = b.number

我看到应该更新的所有ID。当我为where子句添加具有指定值的列时,我只得到一条记录,而不是多条记录。

我做错了什么?请帮忙

2 个答案:

答案 0 :(得分:0)

试试这个

update ThisTable 
set ThisTable.id = b.id
from ThisTable
     inner join othertable b
          on ThisTable.year = b.year
          and ThisTable.number = b.number
where b.k = 'doz'

答案 1 :(得分:0)

感谢您的回答。原来,所有查询都很好。每当我尝试更新时,表触发器都会出现问题。我包含执行计划并注意到其他查询。这是遗留数据库,我看到Programmability / Triggers文件夹中没有任何内容,所以我认为数据库中没有任何触发器。 我开始尝试所有可能的组合查询更新仍然相同的结果。 然后我发现了表级触发器。抱歉混淆,新手在ssms :)