当我在更新查询文本中犯了错误时,我发现出现了不可预测的查询结果。以下是更新的查询文本:
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)。
执行计划如下:
这种错误在每种情况下都会发生吗?
如果是,这种行为有任何实际价值吗?