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是会方便很多的。
开始我本来也是说用触发器或者是存储过程实现的,但发现存储过程不是很清楚,于是我就用触发器。
但写了会,发现还是有些基本的问题。
于是我就在网上找到了一个很好的实例。受这个的启发,我试验了很多次,并终于实现了,心里很开心的。
首先:创建视图来获得年份,因为接下来要创建一个函数,在函数里面不能使用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是会方便很多的。
相关文章推荐
- 设定hibernate里面的时间字段为自动生成
- Oracle 自动加一主键字段生成
- CCBPM(CCFlow与JFlow)中如何让表单字段自动生成编号
- 自动生成流水号-单一StoreProcedure方式
- 内存实现流水号自动生成,按天重置
- java mysql 表中字段是tinyint(1)类型,hibernate自动生成bean对应属性为boolean类型,如何传值
- JDBC 获得自动生成的字段值
- .Net中自动生成Model字段修改日志内容
- Spring 部分字段 无法注入 Myeclipse 自动生成get set 的一个bug
- C#自动生成流水号怎么写
- java实现自动生成流水号
- 创建自动生成单号或者流水号的触发器
- Database2Sharp生成的Enterprise Library架构对Oracle自动增长列字段的支持
- Oracle 自动生成编号(实现sqlserver自增长字段)
- C#中属性实为方法,如果类中只是定义了属性,则编译器会自动生成相应的字段
- 让Myeclipse自动生成的get set方法 自动加上文本注释,并且注释内容包含字段中我们加的文档注释
- 【原创】正则断言的使用--为自动生成的get方法添加注解字段
- eclipse自动生成的get方法里给字段添加this
- Mybatis自动生成Xml文件,针对字段类型为text等会默认产生XXXXWithBlobs的方法问题
- Hibernate使MySql TimeStamp字段自动生成CURRENT_TIMESTAMP日期时间