--参考
在学习中遇到这个问题
数据库里有编号字段
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 tbdrop table tb/*
id name code
----------- ---------- ------------
1 A BH00001
2 B BH00002
3 C BH00003
4 D BH00004(所影响的行数为 4 行)
*/
在学习中遇到这个问题
数据库里有编号字段
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 tbdrop table tb/*
id name code
----------- ---------- ------------
1 A BH00001
2 B BH00002
3 C BH00003
4 D BH00004(所影响的行数为 4 行)
*/
if object_id('[tab]') is not null drop table [tab]
create table [tab]([name] varchar(3),[sex] varchar(2),[address] varchar(3))
insert [tab]
select 'aaa','男','aaa' union all
select 'bbb','女','bbb' union all
select 'ccc','男','ccc' union all
select 'ddd','女','ddd'select * from [tab]CREATE FUNCTION f_NextBH()
RETURNS char(12)
AS
BEGIN
declare @i int
set @i=(select count(*) from tab)
return 'sj'+right(1000000001+@i,8)
END
GO
alter table tab add tid varchar(20) default dbo.f_NextBH()
RETURNS char(12)
AS
BEGIN
declare @i int
set @i=(select count(*) from tab )
return 'sj'+right(convert(varchar,(1000000001+@i)),8)
END
GO
if object_id('[tab]') is not null drop table [tab]
create table [tab](id varchar(100),[name] varchar(3),[sex] varchar(2),[address] varchar(3))
go
insert [tab]
select dbo.f_NextBH(), 'aaa','男','aaa' union all
select dbo.f_NextBH(), 'bbb','女','bbb' union all
select dbo.f_NextBH(), 'ccc','男','ccc' union all
select dbo.f_NextBH(), 'ddd','女','ddd'
go
select * from tab
/*
sj00000001 aaa 男 aaa
sj00000002 bbb 女 bbb
sj00000003 ccc 男 ccc
sj00000004 ddd 女 ddd
*/
insert tab values(dbo.f_NextBH(), 'eee','女','eee')
select * from tab
/*
sj00000001 aaa 男 aaa
sj00000002 bbb 女 bbb
sj00000003 ccc 男 ccc
sj00000004 ddd 女 ddd
sj00000005 eee 女 eee
*/
--得到新编号的函数
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) DEFAULT dbo.f_NextBH(),
col varchar(50))--插入资料
BEGIN TRAN
INSERT tb(BH,col) select dbo.f_NextBH()as id,name from info
COMMIT TRAN--显示结果
SELECT * FROM tb
其结果怎么会。
BH000001 宋捷
BH000001 宣宇
BH000001 韩银志
BH000001 施红
BH000001 严明
BH000001 沈建平
BH000001 曾颖群
BH000001 秦莉
BH000001 周福俊
BH000001 杨彩霞
sj00000001 bbb 女 bbb
sj00000001 ccc 男 ccc
sj00000001 ddd 女 ddd怎么也是这种效果
RETURNS char(10)
AS
BEGIN
declare @i int
set @i=(select count(*) from 原表)
return 'sj'+right(cast(1000000001+@i as varchar),8)
ENDinsert 原表 values (MaxID(), 'newrow', '男', 'text')