クエリテキストの更新を間違えたときに、予測できないクエリ結果を見つけました。これが更新のためのクエリテキストです。
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)だと思います。実行計画は次のようになります。
このような間違いがあるすべての状況で、この状況は同じでしょうか?
はいの場合、この動作は実用的な価値がありますか?