日期:2014-05-18 浏览次数:20933 次
create table tb(no int identity(1,1),id as right('0000'+rtrim(no),5) ,name varchar(10))
insert into tb select 'aa' union select 'bb'
select * from tb
/*
no id name
----------- ---------- ----------
1 00001 aa
2 00002 bb
(2 行受影响)
------解决方案--------------------
if object_id('tb') is not null
drop table tb
go
if object_id('uf_id') is not null
drop function uf_id
go
--创建一个获取最大值的自定义函数
create function uf_id()
returns varchar(10)
as
begin
declare @id varchar(10)
select @id=isnull(max(id)+1,1) from tb
return(@id)
end
go
create table tb
(
id varchar(10) default dbo.uf_id(), --默认值设置为自定义函数
name varchar(10)
)
go
insert into tb(name) values ('张三')
insert into tb(name) values ('李四')
insert into tb(name) values ('王五')
select * from tb
/*
id name
---------- ----------
1 张三
2 李四
3 王五
(3 行受影响)
*/
------解决方案--------------------
--下面的代码生成长度为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
--*/