用SQL实现记录上下移动的思路

  在做管理系统时,不可避免会要求对记录进行上下移动.
  假如我们有一张表 t_test ,它的字段如下:  

None.gifCREATE TABLE [dbo].[t_test] (
None.gif    
[sysid] [bigint] NOT NULL ,
None.gif    
[cname] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[position] [int] NULL 
None.gif)

  其中的position用来表示记录排列次序。

  首先,讨论一下移动一条记录的的SQL语句写法(为简化问题,只写了上移的语句):

None.gif--传入参数ID
None.gif
declare @id bigint
None.gif
set @id=5
None.gif
None.gif--
以下为实现代码
None.gif
declare @pre bigint,@p0 int
None.gif
//Step1:找到比它小的且最大的Position的那条记录
None.gif
select @pre=sysid,@p0=position from 
None.gif    (
select max(b.position) as m from t_test a,t_test b where a.sysid=@id and b.position<a.position) t,t_test c 
None.gif    
where c.position=t.m
None.gif--
Step2:更新前一条记录,让Position+1
None.gif
update t_test set position=position+1 where sysid=@pre
None.gif--
Step3:更新当前记录,让Position=前一条记录
None.gif
update t_test set position=case when @p0 is NULL then 0 else @p0 end where sysid=@id

  逻辑写在注释里了,应该不难看明白。也就是找到前一条记录,跟当前记录交换一下即可。

  然后,我们来看多条记录同时移动的方法,其实可以把上面的过程写进存储过程,然后在前台代码中用循环调用一下即可,如果我们要在SP中实现循环,也可以这样来做:

None.gif--传入参数,一个以‘,'分隔的字串
None.gif
declare @ids nvarchar(20)
None.gif
None.gif
set @ids='2,4'
None.gif
None.gif
--以下为实现代码
None.gif
declare @tmp nvarchar(128),@idx int,@start int,@num nvarchar(8)
None.gif
declare @id bigint,@pre bigint,@pold int
None.gif
None.gif
--Step1:找到第一个分隔符
None.gif
set @tmp = @ids
None.gif
set @idx = charindex(',',@tmp)
None.gif
None.gif
--Step2:循环每个切开的字串
None.gif
while @idx<>0
None.gif
begin
None.gif  
--Step2.1:切开一段
None.gif
  set @num = substring(@tmp,1,@idx-1)
None.gif  
set @tmp = substring(@tmp,@idx+1,len(@tmp)-@idx)
None.gif  
--print 'num='+@num
None.gif
  set @idx=charindex(',',@tmp)
None.gif
None.gif  
--按单条记录移动的方法处理(其实可以用调用另一个SP的方法实现)
None.gif
  set @id=convert(bigint,@num)
None.gif
None.gif  
select @pre=sysid,@pold=position from 
None.gif    (
select max(b.position) as m from t_test a,t_test b where a.sysid=@id and b.position<a.position) t,t_test c 
None.gif    
where c.position=t.m
None.gif
None.gif  
update t_test set position=position+1 where sysid=@pre
None.gif  
update t_test set position=case when @pold is NULL then 0 else @pold end where sysid=@id  
None.gif
None.gif
end
None.gif
None.gif  
--Step3:注意最后一段也要处理一下
None.gif
  --剩下的字串完整处理即可
None.gif
  set @num = substring(@tmp,1,len(@tmp))
None.gif  
--print 'num='+@num
None.gif

None.gif  
set @id=convert(bigint,@num)
None.gif
None.gif  
select @pre=sysid,@pold=position from 
None.gif    (
select max(b.position) as m from t_test a,t_test b where a.sysid=@id and b.position<a.position) t,t_test c 
None.gif    
where c.position=t.m
None.gif
None.gif  
update t_test set position=position+1 where sysid=@pre
None.gif  
update t_test set position=case when @pold is NULL then 0 else @pold end where sysid=@id  

   因为从页面上的checkbox传过来的参数,形式就是以逗号分隔的字串,所以如果直接再传给SP来处理,应该是比较方便的。

转载于:https://www.cnblogs.com/sharetop/archive/2005/12/29/307576.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

误删了计算机桌面回收站,我电脑回收站里的东西已经被删除几天了?怎么可以找回!谢谢...

可以通过数据恢复软件来进行恢复的操作&#xff0c;具体如下&#xff1a;步骤一&#xff1a;在常用的电脑浏览器上搜索【互盾数据恢复软件】&#xff0c;然后将安装包下载至电脑上&#xff0c;安装完成&#xff0c;下载和安装的路径都要避免回收站所在的分区&#xff0c;避免造…

代码整洁之道--思维导图

#思维导图源码 System.out.println("https://www.processon.com/view/60dede90e401fd7e342b3fc3?fromnew1");

人工智能、区块链、图灵测试....这29个大数据热词你知道几个?

来源&#xff1a;中国科协智能制造学会联合体2017年&#xff0c;大数据产业依旧保持高速增长态势&#xff0c;并从单一的技术概念逐渐转化为新要素、新战略、新思维。鉴别真假内行的时候来了&#xff0c;你真的明白这些科技热词的意思吗&#xff1f;以下为您挑选了29个和大数据…

Replace Data Value with Object(以对象取代数据值)

有一个数据项&#xff0c;需要与其他数据和行为一起使用才有意义 将数据项变成对象。 动机 开发初期&#xff0c;你往往决定以简单的数据项表示简单的情况。但是&#xff0c;随着开发的进行&#xff0c;你可能会发现&#xff0c;这些简单数据项不再那么简单了。比如说&#xf…

美研究揭示大脑如何学习语言

来源&#xff1a;中国科学报美国一项新研究表明&#xff0c;人类用于学习语言的大脑回路还能“兼职”其他用途&#xff0c;而非此前认为的是专门用于学习语言的模块。发表在最新一期美国《国家科学院学报》上的这项研究显示&#xff0c;儿童学习母语及成年人学习外语时使用的大…

计算机如何获取知识和技能 实现自我完善,在人工智能中有一个研究领域,主要研究计算机如何获取知识和技能,实现自我完善,这门分支学科叫做。...

摘要&#xff1a;协议在T中&#xff0c;人主要门主要标志地理是指。有域研究情绪调节词解法名释。究领计算机技能叫现场名词解释实验。...协议在T中&#xff0c;人主要门主要标志地理是指。工智个研霍桑在并证的存发现实验实了。有域研究情绪调节词解法名释。改善质的积累引起必…

Change Value to Reference(将值对象改为引用对象)

从一个类衍生出许多彼此相等的实例&#xff0c;希望将他们替换为同一个对象 将这个值对象变成引用对象。 动机 在许多系统中&#xff0c;你都可以为对象做一个有用的分类&#xff1a;引用对象和值对象。前者就像“客户”、“账户”这样的东西&#xff0c;每个对象都代表真实世…

人工智能创业指南:AI 产品未来的发展模式及策略

来源&#xff1a;36氪概要&#xff1a;未来&#xff0c;AI会成为一种基础服务&#xff0c;同时&#xff0c;这种服务会像电力一样通过网络进行传输。有观点认为&#xff0c;未来&#xff0c;AI会成为一种基础服务&#xff0c;同时&#xff0c;这种服务会像电力一样通过网络进行…

实现一个压缩Remoting传输数据的Sink:CompressionSink (转载)

在前两讲《初探.Net Remoting服务端 Loading Remtoing配置内容的过程 》《初探.Net Remoting客户端 Loading Remtoing配置内容的过程 》中,我已经分析了Remoting 的Sink机制&#xff0c;接下来&#xff0c;就提供一个具体的范例&#xff1a;CompressionSink&#xff08;原始Sou…

江西省2019计算机二级报名日期,2020年3月江西计算机等级报名时间、报名入口【2019年12月18日-27日】...

【导语】《2020年3月江西全国计算机等级考试工作通知》现已发布。2020年3月江西计算机等级报名时间&#xff1a;2019年12月18日-27日&#xff0c;考试时间&#xff1a;2020年3月28日-30日&#xff0c;小编现将报考信息发布如下&#xff1a;一、报名时间2020年3月江西计算机等级…

PNAS最新研究揭示大脑如何学习语言

来源&#xff1a;生物360概要&#xff1a;美国一项新研究表明&#xff0c;人类用于学习语言的大脑回路还能“兼职”其他用途&#xff0c;而非此前认为的是专门用于学习语言的模块。美国一项新研究表明&#xff0c;人类用于学习语言的大脑回路还能“兼职”其他用途&#xff0c;而…

Duplicate Observed Data(复制“被监视数据”)

一些领域数据置身于GUI控件中&#xff0c;而领域函数需要访问这些数据 重构&#xff1a;将该数据复制到一个领域对象中。建立一个Observer 模式&#xff0c;可以同步领域对象和GUI 对象内的重复数据。 动机 一个分层良好的系统&#xff0c;应该将处理用户界面和处理业务逻辑的代…

Landing.AI创始人及CEO 吴恩达:人工智能与先进制造

来源&#xff1a;亿欧概要&#xff1a;工业互联网是工业革命和新一代科技革命的交汇&#xff0c;这个变革内涵非常广&#xff0c;包含很多新的业务模式、新的业态、新的产业机遇&#xff0c;同时也会带来很多新技术的创新。工业互联网是工业革命和新一代科技革命的交汇&#xf…

计算机考研落榜了怎么办,考研落榜了怎么办

路漫漫其修远兮&#xff0c;吾将上下而求索什么东西或许对别人有用&#xff0c;但是对我们自己一点用都没有呢&#xff1f;那就是安慰人的话。什么“尽吾志也&#xff0c;而不能至者&#xff0c;可以无悔矣”&#xff0c;什么“是非成败转头空&#xff0c;青山依旧在&#xff0…

详解LSTM:神经网络的记忆机制是这样炼成的

来源&#xff1a;人工智能头条编译 | AI100第一次接触长短期记忆神经网络&#xff08;LSTM&#xff09;时&#xff0c;我惊呆了。原来&#xff0c;LSTM是神经网络的扩展&#xff0c;非常简单。深度学习在过去的几年里取得了许多惊人的成果&#xff0c;均与LSTM息息相关。因此&a…

Change Unidirectional Association to Bidirectional(将单向关联改为双向关联)

两个类都需要使用对方特性&#xff0c;但其间只有一个单向连接 重构&#xff1a;添加一个反向指针&#xff0c;并使修改函数能够同时更新两条连接 由哪个类负责控制关联关系。建议单个类来操控&#xff0c;因为这样就可以将所有处理关联关系的逻辑安置于一地。 1、如果两者都是…

我的作品-图书馆信息管理系统

这曾经是我的数据库课程设计中开发的程序&#xff0c;而且“有幸”当上了我以前高中同学的毕业设计。下面公布几张图片待我的那位同学毕设通过后我就公开源代码&#xff01;哈哈 转载于:https://www.cnblogs.com/wpwen/archive/2006/05/14/399914.html

计算机不能显示可移动磁盘咋办,U盘插上电脑不显示“可移动磁盘”该怎么办...

U盘插上电脑不显示“可移动磁盘”该怎么办重新分配盘符1、右击我的电脑&#xff0c;在弹出的快捷菜单中选择治理命令&#xff0c;进入到计算机治理窗口。2、依次展开存储/可移动存储&#xff0c;单击磁盘治理一项&#xff0c;在窗口右侧&#xff0c;看到U盘运行状态为良好&…

CNNIC报告:我国网民达7.72亿 人工智能取得重要进展

来源&#xff1a;网络大数据概要&#xff1a;报告显示&#xff0c;截至2017年12月&#xff0c;我国网民规模达7.72亿&#xff0c;全年共计新增网民4074万人。互联网普及率为55.8%&#xff0c;较2016年底提升2.6个百分点。中国互联网络信息中心(CNNIC)今日发布第41次《中国互联网…

AI 识别抑郁症正确率高达八成,但AI+精神健康还有很长的路要走

来源&#xff1a; 智能相对论&#xff08;aixdlun&#xff09;近年来&#xff0c;“抑郁症”一词越来越多的被人们提起&#xff0c;不少名人如白岩松、崔永元等都曾表示陷入过抑郁症的痛苦&#xff0c;而抑郁症患者不堪病痛而自杀的新闻也屡见不鲜。生命的“陨落“&#xff0c;…