当我在更新查询文本中出错时,我发现了不可预测的查询结果。这是更新的查询文本。
DECLARE @T TABLE (Id int,[Name] nvarchar(100),RNA int)
INSERT INTO @T(Id,[Name])
SELECT [Id],[Name]
FROM (VALUES (1,N'D'),
(2,N'B'),
(3,N'S'),
(4,N'A'),
(5,N'F')
) AS vtable([Id],[Name])
UPDATE @T
SET RNA = T.RN
FROM (
select PP.Name,ROW_NUMBER() OVER(ORDER BY PP.Name) RN,PP.RNA from @T PP
) T
select * from @T
我知道哪里出错了:
UPDATE @T
应该
UPDATE T
但是为什么结果(带有“坏”查询)看起来像:
Id Name RNA
---- ----- -------
1 D 1
2 B 5
3 S 1
4 A 5
5 F 1
我怀疑 1 和 5 的值是 MIN(Id) 和 MAX(Id)。执行计划如下:
这种情况在每一种有这种错误的情况下都一样吗?
如果是,这种行为有什么实际价值吗?