我有类似的查询:TSQL - 如何防止优化这个查询
update x
set x.y = (
select sum(x2.y)
from mytable x2
where x2.y < x.y
)
from mytable x
问题的关键是,我遍历行和基于子查询在这些领域这是更新场改变。
我看到的是在任何更新发生之前,每个行都会执行子查询,所以每行更改的值是而不是被拾取。
如何强制重新评估每个更新行的子查询?
是否有合适的表格提示或其他?
顺便说一句,我是做的下方,它的工作,但因为有些修改我的查询(逻辑的目的,而不是试图解决这一问题)这一招不再工作:(
declare @temp int
update x
set @temp = (
select sum(x2.y)
from mytable x2
where x2.y < x.y
),
x.y = @temp
from mytable x
我不是特别在意性能,这是在几排
我看到你发布了一个工程,你也可以显示你正在尝试工作的一个? –
这是不可能的。这将是一个错误,如果是的话。 SQL Server会为[万圣节保护](http://blogs.msdn.com/b/craigfr/archive/2008/02/27/halloween-protection.aspx)的计划添加适当的操作符,以防止您想要的行为。 –
@DennisJaheruddin什么?最上面的查询就是我想要做的工作。第二个以前在不同情况下工作 –