您的位置:首页 > 数据库

sqlserver2000字段自动生成流水号

2011-03-18 20:35 204 查看
编号规则为:RE+年份+4位流水号。

开始我本来也是说用触发器或者是存储过程实现的,但发现存储过程不是很清楚,于是我就用触发器。
但写了会,发现还是有些基本的问题。

于是我就在网上找到了一个很好的实例。受这个的启发,我试验了很多次,并终于实现了,心里很开心的。

首先:创建视图来获得年份,因为接下来要创建一个函数,在函数里面不能使用getdate()函数的。

create view v_getdate
as
select dt=year(getdate())

然后:创建一个函数来获得当前的最大编号,其实也就是进行了自动编号的过程。
ps:我要进行自动编号的字段是:cha_register表中的jgID。

create function f_nextID()
returns char(10)
as
begin
declare @dt char(6)
select @dt=dt from v_getdate
select @dt='RE'+@dt
return(
select @dt+right(10001+isnull(right(max(jgID),4),0),4)
from cha_register with(XLOCK,PAGLOCK)

where jgID like @dt+'%'
)
end

最后:分为两种情况
1.还没有创建table:
因为我的cha_register表的字段很多,所以就选用users表中的id字段作为要自动编号的字段,方便举例。
create table users(
id char(10) primary key default dbo.f_nextID(),
name varchar(20)
)

2.已经创建了表(我就是这个情况)
这个时候就需要alter table了,其实就是对jgID字段设置默认值。
alter table cha_register
add constraint df_a default dbo.f_nextID() for jgID

ps:如果想删掉这个默认值的话:
alter table cha_register drop constraint df_a
通过这个删除默认值的语句来看,在上面为字段设置默认值的时候,给默认值添加一个默认值名字df_a是会方便很多的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: