SQL中的字符串字段根据某字段实现自增


--下面的代码生成长度为12的编号,编号以BH开头,前四位数字为col字段,其余6位为流水号。
--得到新编号的函数
alter FUNCTION f(@col int)
RETURNS char(12)
AS
BEGIN
    RETURN(SELECT 'BH'+RIGHT(10000+@col,4)+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK) where col=@col) 
END
GO

--在表中应用函数
drop table tb;
CREATE TABLE tb(
BH char(12) PRIMARY KEY,
col int not null)

--插入资料
BEGIN TRAN
    INSERT tb(BH,col) VALUES(dbo.f(1),1)
    INSERT tb(BH,col) VALUES(dbo.f(2),2)
    INSERT tb(BH,col) VALUES(dbo.f(3),3)
    INSERT tb(BH,col) VALUES(dbo.f(4),4)
    INSERT tb(BH,col) VALUES(dbo.f(1),1)
    INSERT tb(BH,col) VALUES(dbo.f(1),1)
    INSERT tb(BH,col) VALUES(dbo.f(1),1)
    INSERT tb(BH,col) VALUES(dbo.f(2),2)
    INSERT tb(BH,col) VALUES(dbo.f(2),2)
    INSERT tb(BH,col) VALUES((SELECT 'BH'+RIGHT(10000+2,4)+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK) where col=2) ,2)
COMMIT TRAN

--显示结果
SELECT * FROM tb

/*结果
BH0001000001    1
BH0001000002    1
BH0001000003    1
BH0001000004    1
BH0002000001    2
BH0002000002    2
BH0002000003    2
BH0002000004    2
BH0003000001    3
BH0004000001    4
*/

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM