融合了补号处理的编号生成处理示例.sql
2012-05-30 20:55
302 查看
--1.融合了补号处理的流水号编号处理
--下面是使用补号法生成流水编号的用户定义函数,生成的编号总长度为8位,以BH开头,其余6位为流水号。
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
DECLARE @r char(8)
SELECT @r='BH'+RIGHT(1000001+MIN(BH),6)
FROM(
SELECT BH=RIGHT(BH,6) FROM tb WITH(XLOCK,PAGLOCK)
UNION ALL SELECT 0
)a WHERE NOT EXISTS(
SELECT * FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH='BH'+RIGHT(1000001+a.BH,6))
RETURN(@r)
END
GO
--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)
GO
/*==================================================*/
--2.融合了补号处理的日期编号处理
--下面是使用补号法生成日期编号的用户定义函数,生成的编号总长度为12,前6位为日期信息,格式为YYMMDD,后6位为流水号。
--创建得到当前日期的视图
CREATE VIEW v_GetDate
AS
SELECT dt=CONVERT(CHAR(6),GETDATE(),12)
GO
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(12)
AS
BEGIN
DECLARE @dt CHAR(6),@r char(12)
SELECT @dt=dt FROM v_GetDate
SELECT @r=@dt+RIGHT(1000001+MIN(BH),6)
FROM(
SELECT BH=RIGHT(BH,6) FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%'
UNION ALL SELECT 0
)a WHERE NOT EXISTS(
SELECT * FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%'
AND BH=@dt+RIGHT(1000001+a.BH,6))
RETURN(@r)
END
GO
--在表中应用函数
CREATE TABLE tb(
BH char(12) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)
--下面是使用补号法生成流水编号的用户定义函数,生成的编号总长度为8位,以BH开头,其余6位为流水号。
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
DECLARE @r char(8)
SELECT @r='BH'+RIGHT(1000001+MIN(BH),6)
FROM(
SELECT BH=RIGHT(BH,6) FROM tb WITH(XLOCK,PAGLOCK)
UNION ALL SELECT 0
)a WHERE NOT EXISTS(
SELECT * FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH='BH'+RIGHT(1000001+a.BH,6))
RETURN(@r)
END
GO
--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)
GO
/*==================================================*/
--2.融合了补号处理的日期编号处理
--下面是使用补号法生成日期编号的用户定义函数,生成的编号总长度为12,前6位为日期信息,格式为YYMMDD,后6位为流水号。
--创建得到当前日期的视图
CREATE VIEW v_GetDate
AS
SELECT dt=CONVERT(CHAR(6),GETDATE(),12)
GO
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(12)
AS
BEGIN
DECLARE @dt CHAR(6),@r char(12)
SELECT @dt=dt FROM v_GetDate
SELECT @r=@dt+RIGHT(1000001+MIN(BH),6)
FROM(
SELECT BH=RIGHT(BH,6) FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%'
UNION ALL SELECT 0
)a WHERE NOT EXISTS(
SELECT * FROM tb WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%'
AND BH=@dt+RIGHT(1000001+a.BH,6))
RETURN(@r)
END
GO
--在表中应用函数
CREATE TABLE tb(
BH char(12) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)
相关文章推荐
- 使用编号表生成流水号的示例.sql
- 生成纯字母随机编号的示例(大小写混合).sql
- 使用临时表进行编号重排的处理示例.sql
- 使用UPDATE进行编号重排的处理示例.sql
- 返回已用编号、缺号分布字符串的处理示例.sql
- 使用子查询进行编号重排的处理示例.sql
- 生成纯字母随机编号的示例(仅大小或者小写).sql
- 使用编号表按日期生成流水号的示例.sql
- 树形数据深度排序处理示例(模拟单编号法).sql
- 生成纯数字随机编号的示例.sql
- SQL SERVER 分页处理,自动识别标准SQL语句并生成适合分页的SQL语句
- SQL : 自动生成订单编号
- 多列转换为行的交叉报表处理示例.sql
- SQL 数据库生成自动编号代码
- ROLLUP实现的分级汇总示例(带排序处理).sql
- T-SQL 利用SQL语句动态生成 解构并插入表格内容 示例
- SQL--处理表重复记录(查询和删除) 示例:查询最近一条用户登陆日志
- sql处理数据困难的办法--用程序处理生成单一sql
- 缺勤天数统计的处理示例.sql
- 行值动态变化的交叉报表处理示例(转换多列).sql