因此,这个SQL命令照片书中的页面,在添加新上传的页面后调用它,它会更新序列顺序:
UPDATE Gallery.AlbumAsset
SET
Sequence = X.Rank
FROM Gallery.AlbumAsset albass
INNER JOIN
(
SELECT TOP 100 PERCENT
Rank() OVER (Order By Sequence, AssetId) As Rank, AssetId
FROM Gallery.AlbumAsset
WHERE AlbumId = @AlbumId and Sequence > 0
ORDER BY Rank
) X ON albass.AssetId = X.AssetId AND albass.Sequence != X.Rank
WHERE albass.AlbumId = @AlbumId
我认为TOP 100 PERCENT令人困惑,并且不便于阅读,所以我尝试了改变:
UPDATE Gallery.AlbumAsset
SET
Sequence = X.Rank
FROM Gallery.AlbumAsset albass
INNER JOIN
(
SELECT
Rank() OVER (Order By Sequence, AssetId) As Rank, AssetId
FROM Gallery.AlbumAsset
WHERE AlbumId = @AlbumId and Sequence > 0
ORDER BY Rank
) X ON albass.AssetId = X.AssetId AND albass.Sequence != X.Rank
WHERE albass.AlbumId = @AlbumId
导致错误:
ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP,OFFSET或FOR XML。
也许我只需要使用TOP
,但我试图简化这个SQL,但是因为我使用了“更复杂”的SQL语句已经有一段时间了,我几乎试图以某种方式使用CROSS APPLY但是我认为这是一个不正确的方向选择。
答案 0 :(得分:4)
您可以从子查询中删除TOP和ORDER BY子句 - 因为这是一个子查询,ORDER BY子句没有用处,我怀疑TOP子句只是为了防止您看到有关使用ORDER的错误在子查询中。