我想我在这里失去了理智。我尝试更新Table1
的特定子集。让我们说来自SELECT
的{{1}}返回100万行。对于这些行中的每一行,我想交叉应用Table1
中的特定计算总和。
我知道并非Table2
中的所有行都可以使用Table1
部分中的条件加入Table2
。
此更新仍然表示有1,000,000行受到影响。在此之后,我怀疑并添加了' 1 = 0'条件到CROSS APPLY
所以它永远不会返回一行。
但它仍会更新CROSS APPLY
中的所有行?
Table1
有谁知道为什么会这样?
答案 0 :(得分:1)
第二个查询不是空集 - 它返回一个值NULL,它与result连接。
UPDATE T1
SET T1.Field1 = T2.SumField
FROM
(
SELECT *
FROM Table1
WHERE ....
) T1
CROSS APPLY
(
SELECT Field1 SumField
FROM Table2
WHERE [A lot of Fields] = [Some Values from T1]
AND 1 = 0 -- !!!
) T2
你会受到影响的0行(注意缺少SUM)