我是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子句添加具有指定值的列时,我只得到一条记录,而不是多条记录。
我做错了什么?请帮忙
答案 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 :)