日期:2014-05-18  浏览次数:20432 次

|zyciis| 一个表的排序的问题 如何来做从小到大的不重复排序
如有表
tab
ID Name OrderID
1 AA 0
2 BB 2
3 CC 1
---------------------------
我现在比如插入一条数据
DD 1 那么结果就为
tab
ID Name OrderID
1 AA 0
2 BB 3
3 CC 2
4 DD 1
--------------------
也就是说当插入某个数据的时候,如果原来数据已经存在这个值
那么那个值就会+1 ,依次都全有数据

那上面的这个要求用什么办法来做最好呢

我现在是用.NET程序写,
但比如数据库有10000条记录,每修改一个都要修改这个记录,没有效率

大家会怎么做呢\

谢谢

------解决方案--------------------
我理解能力差
------解决方案--------------------
没看懂你的意思,你说的+1是什么东西+1,ID列自增吗
------解决方案--------------------
探讨

晕 看来我表达不好
也就是说要添加一个表,来实现记录的由小到大的排序号
而这个排序号要求是唯一的

这个功能要怎么来实现最好
谢谢

------解决方案--------------------
需要使用存储过程做比较好些

create proc MyInsert(@ID int, @Name varchar(20), @OrderID int)
as
begin

begin tran

-- 1 先更新大于这个OrderID值得记录
update 表 
set OrderID = OrderID+1
where OrderID > @OrderID 

-- 2 插入该纪录
insert 表(ID, Name,OrderID)
values(@ID,@Name,@OrderID )

commint 
end
------解决方案--------------------
如果你的OrderID列不是从外部指定,而要在数据库自增,总是让它等于id不就行了
------解决方案--------------------
自己先建一个表。
如:
SQL code

CREATE TABLE [ConRecLed1] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    ......下面你需要的字段跟你原先的表一个
)
GO

------解决方案--------------------
执行两段sql,就和楼上写的,现更新,在插入,你是不是要的这个。
sql加个参数
------解决方案--------------------
感觉你完全没必要那么插入数据
你只要通过MAX函数查询出该列的最大值再在基础上+1就可以了

 如果是升序排列的话 可以用 select * from 表名 order by 列名 asc(降序改为 desc)
------解决方案--------------------
探讨
如果你的OrderID列不是从外部指定,而要在数据库自增,总是让它等于id不就行了