UPDATE edw.dbo.load_control
SET ROW_COUNT=?, end_time=getdate()
WHERE package_name=?
AND load_control_id=(
SELECT MAX(load_control_id)
FROM edw.dbo.load_control
)
我更关心WHERE子句。它只是选择最大ID并返回它或者它将使用和package_name评估最大ID。
例如,如果max(id)为6但package_names不同而下一个max(id)为5且包名称相同则会更新id 5吗?
答案 0 :(得分:1)
UPDATE
语句将更新
package_name
与load_control_id
等于max(id)
而不是考虑到package_name
(毕竟,没有条件 for package_name
在该子查询中!)因为在你的情况下,没有给定package_name
的行和6的值 - 不会更新任何行。
答案 1 :(得分:0)
在你的例子中,你说
select max(load_control_id) from edw.dbo.load_control
将返回6.
然后更新将被视为
update edw.dbo.load_control
set ROW_COUNT=?, end_time=getdate()
where package_name=? and load_control_id=6
答案 2 :(得分:0)
where子句中的规范不是有条件的,sql server会准确解释你告诉它的内容。将过滤掉与package_name不相等的所有内容。然后,也会过滤掉load_control_id不等于max的所有内容。返回空集时,Sql server没有问题。
如果您想要指定package_name的max load_control_id,那么您可以在子选择中添加该条件。
(select max(load_control_id)
from edw.dbo.load_control
Where package_name = ?)