当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server自动生成日期加数字的序列号

MSSQL
SQL Server 中死锁产生的原因及解决办法
教你在SQL Server 2000数据库中使用分区
数据仓库基本报表制作过程中的SQL写法
自动定时重启sql server回收内存
轻松解决SQL Server 2005中的常见问题
用一个案例讲解SQL Server数据库恢复
安装SQL Server 2005时出现计数器错误
讲解SQL Server 2005数据库的同义词Bug
利用SQL语句对不同数据库进行高效果分页
三种数据库利用SQL语句进行高效果分页
数据库连接字符串的常见问题和解决方法
教你快速掌握一些方便易用的SQL语句
深入分析SQL Server的数据转换服务
系统默认的MySQL用户名消失的解决方法
SQL 2008邮件故障排除:发送测试电子邮件
SQL Server 2005日志文件损坏的处理方法
在SQL Server 2005数据库中进行错误捕捉
SQL Server查询速度慢原因及优化方法
加密SQL Anywhere 提升政府行业数据安全
Windows Server 2008之数据安全保护

MSSQL 中的 SQL Server自动生成日期加数字的序列号


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 145 ::
收藏到网摘: n/a

需要生成下面的序列号,前半部分是yyyymmdd格式的年月日时间数字,后半部分则是每天都从1顺序增长的数字,位数要固定,中间不足的补0。 USE MASTER
GO
IF EXISTS(SELECT * FROM dbo.sysdatabases WHERE
name='my_test_database')
DROP DATABASE [my_test_database]
GO
CREATE DATABASE [my_test_database]
GO
USE [my_test_database]
GO
CREATE TABLE [my_table] ([my_id] VARCHAR(16))
GO
--存储过程开始

CREATE PROCEDURE get_new_id
@NEW_ID VARCHAR(16) OUTPUT
AS
BEGIN
DECLARE @DATE DATETIME
DECLARE @YYYY VARCHAR(4)
DECLARE @MM VARCHAR(2)
DECLARE @DD VARCHAR(2)
--保存取得的当前时间

SET @DATE = GETDATE()
SET @YYYY = DATEPART(yyyy, @DATE)
SET @MM = DATEPART(mm, @DATE)
SET @DD = DATEPART(dd, @DATE)
--位数不够的前面补0
SET @YYYY = REPLICATE('0', 4 - LEN(@YYYY)) + @YYYY
SET @MM = REPLICATE('0', 2 - LEN(@MM)) + @MM
SET @DD = REPLICATE('0', 2 - LEN(@DD)) + @DD
--取出表中当前日期的已有的最大ID
SET @NEW_ID = NULL
SELECT TOP 1 @NEW_ID = [my_id] FROM [my_table] WHERE [my_id] LIKE
@YYYY+@MM+@DD+'%' ORDER BY [my_id] DESC
--如果未取出来
IF @NEW_ID IS NULL
--说明还没有当前日期的编号,则直接从1开始编号
SET @NEW_ID = (@YYYY+@MM+@DD+'00000001')
--如果取出来了

ELSE
BEGIN
DECLARE @NUM VARCHAR(8)
--取出最大的编号加上1

SET @NUM = CONVERT(VARCHAR, (CONVERT(INT, RIGHT(@NEW_ID, 8)) + 1))
--因为经过类型转换,丢失了高位的0,需要补上
SET @NUM = REPLICATE('0', 8 - LEN(@NUM)) + @NUM
--最后返回日期加编号

SET @NEW_ID = @YYYY+@MM+@DD + @NUM
END
END
GO
--执行20次调用及插入数据测试

DECLARE @N INT
SET @N = 0
WHILE @N < 20
BEGIN
DECLARE @NEW_ID VARCHAR(16)
EXECUTE get_new_id @NEW_ID OUTPUT
INSERT INTO [my_table] ([my_id]) VALUES (@NEW_ID)
SET @N = @N + 1
END
SELECT * FROM [my_table]
GO
--输出结果