Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Select有效,但模拟更新不希望_Sql_Sql Server - Fatal编程技术网

Sql Select有效,但模拟更新不希望

Sql Select有效,但模拟更新不希望,sql,sql-server,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 下面是错误消息: 子查询返回了多个值。当子

我是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 
下面是错误消息:

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

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

我做错了什么?请帮助

试试这个

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'

谢谢你的回答。结果证明所有的查询都是好的。每次我尝试更新时,表触发器都会被触发,这是一个问题。我包括了执行计划,并注意到了其他问题。这是遗留数据库,我看到可编程性/触发器文件夹中并没有任何内容,所以我认为数据库中并没有任何触发器。 我开始尝试所有可能的查询更新组合,结果仍然相同。
然后我发现了表级触发器。抱歉搞混了,ssms中的新手:

您是否尝试运行子查询以查看返回的确切内容?从第一个代码块来看,您似乎没有真正更新一行。看起来你正在尝试每年更新一行/数字组合弗雷德:正如我在帖子中所写的,我尝试了可选的select语句,结果与应该的一样。詹姆斯:你可能是对的,但即使这样,它也应该在子查询中返回1行。这看起来很有希望,谢谢。我现在下班了,但我明天去看看。