惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
H
Help Net Security
Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
博客园 - 叶小钗
Y
Y Combinator Blog
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
C
Check Point Blog
Recent Announcements
Recent Announcements
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Azure Blog
Microsoft Azure Blog
V
Visual Studio Blog
B
Blog

博客园 - fisherman

操纵自如--页面内的配合与通信 一些DIV+CSS 命名规范 asp.net 2.0中生成RSS 避免重复提交 - fisherman - 博客园 button 删除确认 - fisherman - 博客园 用相对定位和负向移动完成图片象框阴影 负边距居中法(水平居中、垂直居中) - fisherman - 博客园 CSS 代码格式化工具 - fisherman - 博客园 JS代码的格式化和压缩 - fisherman - 博客园 把SQL SERVER里表里的数据导出成为insert into 脚本 对FckEditor编辑器在MAXTHON浏览器下选择服务器文件对话框显示不正常的改进 下载网页中远程图片的方法 读取marc数据 关于ISO2709数据的格式说明 C#写的读取ISO2709格式数据的DLL 数据库打开 使用 Engine 对象创建 SQL Server Compact Edition 数据库 用SharpZipLib压缩和解压缩文件 Access数据库压缩和修复
学习写第一个SQL server触发器
fisherman · 2007-12-20 · via 博客园 - fisherman

在最近的程序中,有一个字段表示排序,1~N的。但却不能是自增的类型,因为用户可以交换这个排序的先后的。

如果已经记录的order是:1,2,3,4,5,6

如果删了1,3,4的话,余下的记录变成了2,5,6,这不太符合要求,我希望记录始终从1开始,并且中间不能间断,即便你删了134,剩下记录的order还要是1,2,3

起初做到存储过程中,当删除的时候对其重新排序,后来一想,触发器不是更好吗?

于是就有了:

CREATE TRIGGER [reorderAfterDel]
   ON  [dbo].[Categories]
   AFTER DELETE
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
 declare @left int;
 declare @i int;
 select categories,orders into #categoriesTemp from [dbo].[Categories];
 select @left=count(*) from #categoriesTemp;
 set @i=1;
 while(@left>0)
 begin
  declare @minOrder int;
  select @minOrder=min(orders) from #categoriesTemp;
  if(@minOrder>@i)
  begin
   update [dbo].[Categories] set orders=@i where orders=@minOrder;
  end
  delete from #categoriesTemp where orders=@minOrder;
  set @i=@i+1;
  set @left=@left-1;
 end
 drop table #categoriesTemp;
END

现在无论怎么删,剩余的order总是从1开始的,并且中间不间断了。
来源:http://99love.blueidea.com/archives/2007/5332.shtml