MS SqlServer 2000交换排序的一种方法
来源:互联网 发布:紫微斗数软件 编辑:程序博客网 时间:2024/05/03 12:57
可能我说的交换排序还有点歧义。看下面的图片
就是要实现这样的排序。
首先数据库结构得具备3个字段
ID , Name , OrderNum
排序的规则为,首先按OrderNum倒序排列,然后如果OrderNum 相同则按ID的倒序排列。
Sql语句为
当点向上箭头的时候,表示要把当前的记录和上面的记录交换,实现排序。同样点向下箭头的时候也一样。
假设我们当需要把上图中ID为1的记录和ID为3的记录交换。假设是把1向上和3交换(点1的上箭头)。
如果,ID3的OrderNum 为2,ID1的OrderNum 为1,那么直接交换OrderNum 就可以。看来是如此,但是真的可以么?
假设数据如下:
ID Name OrderNum
4 .... 2
3 .... 2
6 ...... 1
.........
上面的数据是可能的,假如把ID6的OrderNum 换成是2就跑第一个去了!
这里就不详细介绍各种可能了,我介绍下我采用的方法。
我使用存储过程来解决这个问题,需要传递的参数为:1、是up(上箭头)还是down(下箭头),2、选择记录的id,3、选择记录的order。
<a href="?order=up&id=<%# Eval("ID") %>&type=<%# Eval("OrderNum ") %>">↑</a>
|
<a href="?order=down&id=<%# Eval("ID") %>&type=<%# Eval("OrderNum ") %>">↓</a>
存储过程为
http://birdshover.cnblogs.com
就是要实现这样的排序。
首先数据库结构得具备3个字段
ID , Name , OrderNum
排序的规则为,首先按OrderNum倒序排列,然后如果OrderNum 相同则按ID的倒序排列。
Sql语句为
Select * From Sorts Order By OrderNum Desc, ID Desc
当点向上箭头的时候,表示要把当前的记录和上面的记录交换,实现排序。同样点向下箭头的时候也一样。
假设我们当需要把上图中ID为1的记录和ID为3的记录交换。假设是把1向上和3交换(点1的上箭头)。
如果,ID3的OrderNum 为2,ID1的OrderNum 为1,那么直接交换OrderNum 就可以。看来是如此,但是真的可以么?
假设数据如下:
ID Name OrderNum
4 .... 2
3 .... 2
6 ...... 1
.........
上面的数据是可能的,假如把ID6的OrderNum 换成是2就跑第一个去了!
这里就不详细介绍各种可能了,我介绍下我采用的方法。
我使用存储过程来解决这个问题,需要传递的参数为:1、是up(上箭头)还是down(下箭头),2、选择记录的id,3、选择记录的order。
<a href="?order=up&id=<%# Eval("ID") %>&type=<%# Eval("OrderNum ") %>">↑</a>
|
<a href="?order=down&id=<%# Eval("ID") %>&type=<%# Eval("OrderNum ") %>">↓</a>
存储过程为
CREATE PROCEDURE NewsSortOrder @order char(20),@id int,@type int AS
declare @nowid int --搜索上一条或下一条的ID
if @order = "up" --上升
begin
set @nowid = (select Top 1 ID From Sorts Where OrderNum >= @type And ID<>@id Order By OrderNum ASC )
if isnumeric(@nowid) = 1 --假如为数字的话
begin
if (Select OrderNum From Sorts Where ID = @nowid) = @type --假如两记录type相同的情况
begin
Update Sorts Set OrderNum = OrderNum + 1 Where ID = @id Or OrderNum > @type --该记录type+1并且他的上面的记录除了上一条type全部加一
end
else
begin --开始调换
Update Sorts Set OrderNum = (Select OrderNum From Sorts Where ID = @nowid) Where ID = @id
Update Sorts Set OrderNum = @type Where ID = @nowid
end
end
end
if @order = "down" --下降
begin
set @nowid = (select Top 1 ID From Sorts Where OrderNum <= @type And ID <>@id Order By OrderNum Desc)
if isnumeric(@nowid) = 1 --如果为数字
begin
if (Select OrderNum From Sorts Where ID = @nowid) = @type --假设两记录type相同
begin
Update Sorts Set OrderNum = OrderNum - 1 Where ID = @id Or OrderNum < @type --该记录type-1并且他的下面的记录除了下一条type全部减一
end
else
begin --开始调换
Update Sorts Set OrderNum = (Select OrderNum From Sorts Where ID = @nowid) Where ID = @id
Update Sorts Set OrderNum = @type Where ID = @nowid
end
end
end
GO
以上是.Net2.0 + SqlServer 2000 调试declare @nowid int --搜索上一条或下一条的ID
if @order = "up" --上升
begin
set @nowid = (select Top 1 ID From Sorts Where OrderNum >= @type And ID<>@id Order By OrderNum ASC )
if isnumeric(@nowid) = 1 --假如为数字的话
begin
if (Select OrderNum From Sorts Where ID = @nowid) = @type --假如两记录type相同的情况
begin
Update Sorts Set OrderNum = OrderNum + 1 Where ID = @id Or OrderNum > @type --该记录type+1并且他的上面的记录除了上一条type全部加一
end
else
begin --开始调换
Update Sorts Set OrderNum = (Select OrderNum From Sorts Where ID = @nowid) Where ID = @id
Update Sorts Set OrderNum = @type Where ID = @nowid
end
end
end
if @order = "down" --下降
begin
set @nowid = (select Top 1 ID From Sorts Where OrderNum <= @type And ID <>@id Order By OrderNum Desc)
if isnumeric(@nowid) = 1 --如果为数字
begin
if (Select OrderNum From Sorts Where ID = @nowid) = @type --假设两记录type相同
begin
Update Sorts Set OrderNum = OrderNum - 1 Where ID = @id Or OrderNum < @type --该记录type-1并且他的下面的记录除了下一条type全部减一
end
else
begin --开始调换
Update Sorts Set OrderNum = (Select OrderNum From Sorts Where ID = @nowid) Where ID = @id
Update Sorts Set OrderNum = @type Where ID = @nowid
end
end
end
GO
http://birdshover.cnblogs.com
http://www.cnblogs.com/birdshover/archive/2006/08/11/473847.html
- MS SqlServer 2000交换排序的一种方法
- 一种简单交换排序
- java交换两个变量的一种方法
- ms-sqlserver sql 默认排序
- sqlserver分页比较高效的一种方法
- 快速排序的一种方法
- QTP中MS SQL SERVER数据库连接的一种简单方法
- 在Linux(UNIX)下连接MS SQLserver的方法
- c++在unix系统上访问ms sqlserver的方法
- 一种新的变量取值交换方法
- 一种不用临时变量的交换swap方法
- ms SqlServer编程的疑问
- 一种不错的从SQLServer转成Mysql数据库的方法
- 一种在SQLServer中实现Sequence的高效方法
- SQLSERVER 存储过程分隔字符串的一种方法
- java链接ms sqlserver 2000和2005的区别
- 获取MS SqlServer 2000中字段的备注信息
- 递归排序的一种实现方法。
- google的一些小秘密:) 转载
- 为你的应用程序添加动态Java代码
- 从ASP过渡到ASP.net遗留的二十大积习
- 防止程序二次启动②
- 愿死难的同胞可以安息!中国人应看的一部片子《东京审判》
- MS SqlServer 2000交换排序的一种方法
- ap0x generic unpacker
- ASP.NET 数据绑定常用代码
- ASP.NET Session 详解
- 学习]Required Java version 1.4.1. Available:1.3.1_01
- Asp.net中基于Forms验证的角色验证授权
- asp.net中关于多文件上传
- VMware-Tools安装 in FC-5 (Fedora Core 5)[原]
- test~~