是否生成用于更改项目顺序的更新SQL?
假设我有这张桌子是否生成用于更改项目顺序的更新SQL?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,假设我有这张桌子 ID Name Order ======== ======== ========= 1 d 1 2 g 2 3 b 3 4 f 4 5 a 5 现在,在我的UI中,用户可以通过拖放更改顺序。例如,他可以将项目d移动到某个位置。那我的桌子看起来像
ID Name Order
======== ======== =========
1 d 1
2 g 2
3 b 3
4 f 4
5 a 5
现在,在我的UI中,用户可以通过拖放更改顺序。例如,他可以将项目d移动到某个位置。那我的桌子看起来像
ID Name Order
======== ======== =========
2 g 1
3 b 2
4 f 3
1 d 4
5 a 5
有人能告诉我SQL吗?我输入了ID、OldOrder和NewOrder。您甚至不需要
ID
参数
UPDATE
yourTable
SET
Order = (CASE WHEN Order = @oldOrder THEN @newOrder
WHEN @newOrder > @oldOrder THEN Order - 1
ELSE Order + 1 END)
WHERE
Order BETWEEN @oldOrder AND @newOrder
OR Order BETWEEN @newOrder AND @oldOrder
- 任何高于或低于原始和新位置的内容都不需要更改
- 其他所有东西都向上或向下移动一个
- 除原始项目外,该项目将移动到新位置
- 您甚至不需要
ID
参数
UPDATE
yourTable
SET
Order = (CASE WHEN Order = @oldOrder THEN @newOrder
WHEN @newOrder > @oldOrder THEN Order - 1
ELSE Order + 1 END)
WHERE
Order BETWEEN @oldOrder AND @newOrder
OR Order BETWEEN @newOrder AND @oldOrder
- 任何高于或低于原始和新位置的内容都不需要更改
- 其他所有东西都向上或向下移动一个
- 除原始项目外,该项目将移动到新位置
将项目移动到新位置
和如果项目向上移动,则向下移动其他项目
和如果项目向下移动,则向上移动其他项目
。还有一个WHERE
子句,确保您只更新实际需要更新的行。这是一个很好的解决方案,在Android上也适用于SQL Lite。我必须承认,您的答案比我(同时)删除的答案要好得多+谢谢你教我这么好solution@user960567我不认为这是大的,因为它更新所有必要的记录,处理向上和向下移动,并在一个单一的声明。考虑到你所要求的一切,你希望这个有多短?(我不认为任何SQL查询是大的,直到它达到至少20行)…<代码>更新您的表< /代码>不能改变。代码>设置顺序=无法更改。三角箱的3个部件将项目移动到新位置
和如果项目向上移动,则向下移动其他项目
和如果项目向下移动,则向上移动其他项目
。还有一个WHERE
子句,确保只更新实际需要更新的行。这是一个很好的解决方案,在Android上也可以使用SQLLite。