• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

这样的SQL怎么写,谢谢了!

Rayphrank 2003-05-26 09:27:37
这样一张表
ID 档案号 。。。
1 H0001 。。。
2 H0002 。。。
3 H0003 。。。
4 H0004。。。

客户要求档案号是可以插入的,即
假如表中现在有了4条记录,档案号如上,现在客户要在档案号为H0003的记录前加一条记录,新加入记录的档案号为H0003,而原来的档案号为H0003记录,它的档案号则变成H0004,以下的记录依此类推,就好像档案号是自动编号一样,

这样的修改SQl怎么写阿,有没有好的办法,能让这样的修改速度很快(记录很多)







...全文
3 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
CrazyFor 2003-05-27
你这样的档案号没有意义,能不能用另一字段来控制其顺序,但档案号不一定是这个顺序,

如果你的档案号一直在变,那档案号这个字段存在的意义真是不大。
回复
Rayphrank 2003-05-27
OK,大力还有很多其他朋友的方法可行,待会给各位分数,

我的程序是这样的,
表名是资料表,每种资料都有一个档案号,档案号是根据表中记录的数量自动产生,档案号的格式在客户那有规定,比如前缀H什么的,只要资料进库,档案号就确定下来,我程序一开始也是这样设计的,只要记录进库,档案号就不能改动了,但客户提出,如果我输了很多资料进去,忽然发现,前面少了一条资料,而且这条资料只能加在前面,那怎么办?

其实我知道这种像各位的处理方法效率不太高,如果有十万条记录,恰好要在第一条记录前插一条记录,那就要修改九万九千九百九十九条记录了,各位有没有别的数据库结构的设计方法??

像这样的情况应该怎样设计数据库?才能使插入或者修改,删除(如果我把前面的资料删除,后面资料的档案号也要更改)的效率高

回复
fyg_02971 2003-05-27

create trigger tr_insert on table
for insert
as
BEGIN
begin trans
update table set 档案号='H'+right('0000'+cast(right(档案号,4)+1 as varchar(4),4) where 档案号>=@新档案号
insert 表 values(@新档案号,.....)
commit trans
END
回复
ydzqw 2003-05-27
good
回复
joygxd 2003-05-27
create trigger tr_insert table
for insert
as
if exists( select 档案号 from table where 档案号=inserted.档案号)
update table set 档案号='H'+cast(right(档案号,4)+1 as varchar(4)) where 档案号>=inserted.档案号


回复
lvcheng606717 2003-05-27
我觉得可以从新定义档案号的格式,按照所需的方式排序,自动产生增加时通过
触发器来实现。
回复
BBQ 2003-05-26
支持大力的,真够快的
create procedure InsertDocumentID(@newID varchar(10)) as
BEGIN
begin trans
update DOCTable set DocID='H'+right('0000'+cast(right(档案号,4)+1 as varchar(4),4) where 档案号>=@新档案号
insert 表 values(@新档案号,.....)
commit trans
END
回复
homeness 2003-05-26
大力的方法很好
可以去试一下
回复
pengdali 2003-05-26
declare @新档案号 char(5)
set @新档案号='H0003'

begin tran
update 表 set 档案号='H'+right('0000'+cast(right(档案号,4)+1 as varchar(4),4) where 档案号>=@新档案号
insert 表 values(@新档案号,.....)
commit tran
回复
yll6865 2003-05-26
触发器解决此问题比较合适,做一个更新触发器试试效果吧
回复
ydzqw 2003-05-26
gz
回复
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-26 09:27
社区公告
暂无公告