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
set @新档案号='H0003'begin tran
update 表 set 档案号='H'+right('0000'+cast(right(档案号,4)+1 as varchar(4),4) where 档案号>=@新档案号
insert 表 values(@新档案号,.....)
commit tran
解决方案 »
- 请高手帮我看一下
- 安装sql 2000的问题
- 如何提取字段中制定的信息
- sql 2008无法执行维护计划
- javascript能做到关闭窗口的时候的提示框用div层来代替提示吗?
- 为什么同时装了sql2000和2005,用2000的事例连不上数据库??
- 关于select into 的问题
- 安装MS SQL2000的问题! 安装到"安装程序正在启动服务器并安装您选择的配置"就停了! 最后一步了
- MSSql和MySql数据库的共用问题,希望高手给个思路!
- SQLSERVER2000中的错误:未于信任 SQL Server连接相关联,是什么原因?请帮我,谢谢
- 请问sql如何不放置在公网上,其中的数据又能被其他公网的机器安全的查询到?
- sqlserver2000可以在存储过程里发送邮件吗?
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
for insert
as
if exists( select 档案号 from table where 档案号=inserted.档案号)
update table set 档案号='H'+cast(right(档案号,4)+1 as varchar(4)) where 档案号>=inserted.档案号
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
表名是资料表,每种资料都有一个档案号,档案号是根据表中记录的数量自动产生,档案号的格式在客户那有规定,比如前缀H什么的,只要资料进库,档案号就确定下来,我程序一开始也是这样设计的,只要记录进库,档案号就不能改动了,但客户提出,如果我输了很多资料进去,忽然发现,前面少了一条资料,而且这条资料只能加在前面,那怎么办?其实我知道这种像各位的处理方法效率不太高,如果有十万条记录,恰好要在第一条记录前插一条记录,那就要修改九万九千九百九十九条记录了,各位有没有别的数据库结构的设计方法??像这样的情况应该怎样设计数据库?才能使插入或者修改,删除(如果我把前面的资料删除,后面资料的档案号也要更改)的效率高