ren*_*ren 0 sql t-sql sql-server sql-server-2008
假设:
declare @counter int
set @counter = 0
update MyTable
set @counter = MyField = @counter + 1
where Some_ID in (select ID from SomeTable)
Run Code Online (Sandbox Code Playgroud)
我想要的是更新发生的顺序与select ID from SomeTable
返回ID 相同.有一个很好的方法来做到这一点?
这是一个使用CTE的解决方案ROW_NUMBER
......你可以确定你希望SomeTable
在OVER
子句中返回记录的顺序ROW_NUMBER
.
;WITH rn (ID, rowNumber) AS
(
SELECT st.ID, ROW_NUMBER() OVER (ORDER BY st.ID)
FROM SomeTable st
WHERE EXISTS (
SELECT 1
FROM MyTable mt
WHERE mt.Some_ID = st.ID
)
)
UPDATE mt
SET MyField = rowNumber
FROM
MyTable mt
JOIN rn ON rn.ID = mt.Some_ID
Run Code Online (Sandbox Code Playgroud)