关于自动编号

时间:2022-02-15 06:02:12
各位老师,本人初学sql,请各位老师帮助一下,小弟在这感激不尽。我用的是sql server 2000,在小弟的“销售”数据库中的“出货”表中需要建一个自动编号列,编号的格式是“规格代码”+“日期”+“日期当天流水号”(规格代码和日期为表中另外两个列),小弟希望编号能自动生成,且在进行添加记录、修改日期或规格代码、删除记录时能自动维护,请问各位老师怎样操作,需要什么代码,请各位老师赐教,最好说的详细一点,本人保证给分,分不够本人追加

10 个解决方案

#1


在学习中遇到这个问题 
数据库里有编号字段 
BH00001 
BH00002 
BH00003 
BH00004 
如何实现自动增长

 

--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
    RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
END
GO

--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)

--插入资料
BEGIN TRAN
    INSERT tb(col) VALUES(1)
    INSERT tb(col) VALUES(2)
    INSERT tb(col) VALUES(3)
    DELETE tb WHERE col=3
    INSERT tb(col) VALUES(4)
    INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)
COMMIT TRAN

--显示结果
SELECT * FROM tb
/*--结果
BH         col 
---------------- ----------- 
BH000001  1
BH000002  2
BH000003  4
BH000004  14
--*/

 

create table tb
(id int identity,
name varchar(10),
code as 'BH'+right('0000'+cast(id as varchar),5))
go
insert tb(name) select 'A'
union all select 'B'
union all select 'C'
union all select 'D'

select * from tb

drop table tb

/*
id          name       code         
----------- ---------- ------------ 
1           A          BH00001
2           B          BH00002
3           C          BH00003
4           D          BH00004

(所影响的行数为 4 行)
*/

#2


create table tb
(id int identity,
name varchar(10),
code as name+CONVERT(CHAR(10),GETDATE(),120)+right('0000'+cast(id as varchar),5))
go
insert tb(name) select 'A'
union all select 'B'
union all select 'C'
union all select 'D'

select * from tb

drop table tb

#3


--(4)生成流水号   
if object_id('tb') is not null drop table tb   
drop function dbo.FC_Next   
create function dbo.FC_Next()   
returns char(8)   
as  
begin   
     return (select 'BH'+right(1000001+isnull(right(max(BH),6),0),6) from tb)   
end    
create table tb   
(   
  BH char(8) primary key default dbo.FC_Next(),   
  col int  
)   
select * from tb   
  
begin tran   
insert into tb (col) values (1)   
insert into tb (col) values (2)   
insert into tb(BH,col) values (dbo.FC_Next(),14)   
commit tran   
select * from tb  


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2009/02/10/3872714.aspx

#4


create table tb
(id int identity,
name varchar(10),
code as name+REPLACE(CONVERT(CHAR(10),GETDATE(),120),'-','')+right('0000'+cast(id as varchar),5))
go
insert tb(name) select 'A'
union all select 'B'
union all select 'C'
union all select 'D'

select * from tb

drop table tb
--查询结果
id name code
1 A A2010090900001
2 B B2010090900002
3 C C2010090900003
4 D D2010090900004

#5


if object_id('tb') is not null drop table tb   
drop function dbo.FC_Next   
create function dbo.FC_Next()   
returns char(8)   
as  
begin   
     return (select 'BH'+right(1000001+isnull(right(max(BH),6),0),6) from tb)   
end    
create table tb   
(   
  BH char(8) primary key default dbo.FC_Next(),   
  col int  
)   
select * from tb   
  
begin tran   
insert into tb (col) values (1)   
insert into tb (col) values (2)   
insert into tb(BH,col) values (dbo.FC_Next(),14)   
commit tran   
select * from tb  

#6


首先谢谢各位老师,我把表名和相关列名都说出来了,那位老师能帮我把代码写出来,谢谢
表名:出货
相关列:编号,代码规格,日期

#7


小弟希望编号能自动生成,且在进行添加记录、修改日期或规格代码、删除记录时能自动维护

添加记录的流水号处理的规则楼上的几个都说了。

修改日期或规格代码也要改编号,这个可能要用到触发器。修改记录就触发把日期或规格代码的值更新到编号

删除记录自动维护是什么意思?把后面的流水号往前移?这个应该没必要,而且会影响数据库的性能的。

#8


引用 6 楼 dianlizhigong 的回复:
首先谢谢各位老师,我把表名和相关列名都说出来了,那位老师能帮我把代码写出来,谢谢
表名:出货
相关列:编号,代码规格,日期

这就不对了吧,大家都的饭都作好了,就等你吃,你还想让大家喂。。。

自己要多写才能有所提高 。。不然很难提高 的

#9


create table 出货
(id int identity,
代码规格 varchar(10),
日期 datetime,
编号 as 代码规格+REPLACE(CONVERT(CHAR(10),日期,120),'-','')+right('0000'+cast(id as varchar),5))
go
insert 出货(代码规格,日期) select 'A','2010-09-02 14:20:30'
union all select 'B','2010-09-05 14:20:30'
union all select 'C','2010-09-06 14:20:30'
union all select 'D','2010-09-07 14:20:30'

select * from 出货

drop table 出货

#10


在C#代码中怎么自定义规则,让一个string类型的字符串自增长,也就是自动编号功能!???
先获取字段中最大的数,然后自动加1,这个在C#中怎么实现呢???

#1


在学习中遇到这个问题 
数据库里有编号字段 
BH00001 
BH00002 
BH00003 
BH00004 
如何实现自动增长

 

--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
    RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
END
GO

--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)

--插入资料
BEGIN TRAN
    INSERT tb(col) VALUES(1)
    INSERT tb(col) VALUES(2)
    INSERT tb(col) VALUES(3)
    DELETE tb WHERE col=3
    INSERT tb(col) VALUES(4)
    INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)
COMMIT TRAN

--显示结果
SELECT * FROM tb
/*--结果
BH         col 
---------------- ----------- 
BH000001  1
BH000002  2
BH000003  4
BH000004  14
--*/

 

create table tb
(id int identity,
name varchar(10),
code as 'BH'+right('0000'+cast(id as varchar),5))
go
insert tb(name) select 'A'
union all select 'B'
union all select 'C'
union all select 'D'

select * from tb

drop table tb

/*
id          name       code         
----------- ---------- ------------ 
1           A          BH00001
2           B          BH00002
3           C          BH00003
4           D          BH00004

(所影响的行数为 4 行)
*/

#2


create table tb
(id int identity,
name varchar(10),
code as name+CONVERT(CHAR(10),GETDATE(),120)+right('0000'+cast(id as varchar),5))
go
insert tb(name) select 'A'
union all select 'B'
union all select 'C'
union all select 'D'

select * from tb

drop table tb

#3


--(4)生成流水号   
if object_id('tb') is not null drop table tb   
drop function dbo.FC_Next   
create function dbo.FC_Next()   
returns char(8)   
as  
begin   
     return (select 'BH'+right(1000001+isnull(right(max(BH),6),0),6) from tb)   
end    
create table tb   
(   
  BH char(8) primary key default dbo.FC_Next(),   
  col int  
)   
select * from tb   
  
begin tran   
insert into tb (col) values (1)   
insert into tb (col) values (2)   
insert into tb(BH,col) values (dbo.FC_Next(),14)   
commit tran   
select * from tb  


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2009/02/10/3872714.aspx

#4


create table tb
(id int identity,
name varchar(10),
code as name+REPLACE(CONVERT(CHAR(10),GETDATE(),120),'-','')+right('0000'+cast(id as varchar),5))
go
insert tb(name) select 'A'
union all select 'B'
union all select 'C'
union all select 'D'

select * from tb

drop table tb
--查询结果
id name code
1 A A2010090900001
2 B B2010090900002
3 C C2010090900003
4 D D2010090900004

#5


if object_id('tb') is not null drop table tb   
drop function dbo.FC_Next   
create function dbo.FC_Next()   
returns char(8)   
as  
begin   
     return (select 'BH'+right(1000001+isnull(right(max(BH),6),0),6) from tb)   
end    
create table tb   
(   
  BH char(8) primary key default dbo.FC_Next(),   
  col int  
)   
select * from tb   
  
begin tran   
insert into tb (col) values (1)   
insert into tb (col) values (2)   
insert into tb(BH,col) values (dbo.FC_Next(),14)   
commit tran   
select * from tb  

#6


首先谢谢各位老师,我把表名和相关列名都说出来了,那位老师能帮我把代码写出来,谢谢
表名:出货
相关列:编号,代码规格,日期

#7


小弟希望编号能自动生成,且在进行添加记录、修改日期或规格代码、删除记录时能自动维护

添加记录的流水号处理的规则楼上的几个都说了。

修改日期或规格代码也要改编号,这个可能要用到触发器。修改记录就触发把日期或规格代码的值更新到编号

删除记录自动维护是什么意思?把后面的流水号往前移?这个应该没必要,而且会影响数据库的性能的。

#8


引用 6 楼 dianlizhigong 的回复:
首先谢谢各位老师,我把表名和相关列名都说出来了,那位老师能帮我把代码写出来,谢谢
表名:出货
相关列:编号,代码规格,日期

这就不对了吧,大家都的饭都作好了,就等你吃,你还想让大家喂。。。

自己要多写才能有所提高 。。不然很难提高 的

#9


create table 出货
(id int identity,
代码规格 varchar(10),
日期 datetime,
编号 as 代码规格+REPLACE(CONVERT(CHAR(10),日期,120),'-','')+right('0000'+cast(id as varchar),5))
go
insert 出货(代码规格,日期) select 'A','2010-09-02 14:20:30'
union all select 'B','2010-09-05 14:20:30'
union all select 'C','2010-09-06 14:20:30'
union all select 'D','2010-09-07 14:20:30'

select * from 出货

drop table 出货

#10


在C#代码中怎么自定义规则,让一个string类型的字符串自增长,也就是自动编号功能!???
先获取字段中最大的数,然后自动加1,这个在C#中怎么实现呢???