zgdy 发表于 2017-12-14 11:47:35

Sql Server实现自动增长

--下面的代码生成长度为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
  
---------------- -----------
  
BH0000011
  
BH0000022
  
BH0000034
  
BH00000414
  
--
*/  

  

  
create table tb
  
(id
int>
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
页: [1]
查看完整版本: Sql Server实现自动增长