1

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

如果我使用前 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 子句时,我只得到一条记录,而不是多条记录。

我究竟做错了什么?请帮忙

4

2 回答 2

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'
于 2013-10-16T14:34:39.530 回答
0

感谢您的回答。事实证明,所有查询都很好。每次我尝试更新时都会触发的表触发器存在问题。我包括了执行计划并注意到了额外的查询。这是遗留数据库,我看到 Programmability/Triggers 文件夹中没有任何内容,所以我认为数据库中没有任何触发器。我开始尝试所有可能的查询更新组合,结果仍然相同。然后我发现了表级触发器。对不起,ssms的新手:)

于 2013-10-18T19:29:47.927 回答