You are missing the FROM
clause:
;WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY col1,col2) rno FROM @table
)
UPDATE c1
SET col3='Test'
FROM cte c1 -- MISSING HERE
LEFT JOIN cte c2 ON (c1.rno = c2.rno+1 OR c1.rno = c2.rno-1) AND c1.rid = c2.rid
WHERE c2.id IS NULL;
You could also use NOT EXISTS
, which may perform better in SQL Server than LEFT JOIN/IS NULL
;WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY col1,col2) rno FROM @table
)
UPDATE cte
SET col3='Test'
WHERE NOT EXISTS (SELECT 1
FROM cte c2
WHERE (cte.rno = c2.rno+1 OR cte.rno = c2.rno-1)
AND cte.rid = c2.rid);