IF EXISTS(
SELECT NAME
FROM sysobjects
WHERE NAME = 'proc_GenerateOrderNO'
AND TYPE = 'P'
)
BEGIN
DROP PROCEDURE proc_GenerateOrderNO
PRINT '已存在,删除再添加存储过程'
END
ELSE
PRINT '不存在,添加'
GO
------------------------------------------------------
--Author : yenange,
--Description: 通用的产生工单号的存储过程
--Date : 2013-01-24
--Demo : EXEC proc_GenerateOrderNO 'tableName','CreatedTime','Seal-',1
CREATE PROC proc_GenerateOrderNO
(
@tableName NVARCHAR(200), --表名
@createDT_ColName NVARCHAR(200), --此表的创建日期字段名
@prefix NVARCHAR(200), --工单号前缀
@fullYear BIT, --是否需要完整的年份 ( 1: 2013, 0: 13 )
@orderType NVARCHAR(200)=NULL --工单类型 (此字段为扩展字段,无必要可不填)
)
AS
BEGIN
DECLARE @result NVARCHAR(MAX)
DECLARE @lastStr NVARCHAR(20)
declare @num INT,@sql nvarchar(4000)
--得到当天的年月日
DECLARE @y VARCHAR(4),@m VARCHAR(2),@d VARCHAR(2),@dateStr VARCHAR(20)
SELECT @y = DATEPART(YEAR, GETDATE())
IF(@fullYear=0)
BEGIN
SET @y = SUBSTRING(@y,3,2)
END
SELECT @m = CONVERT(VARCHAR(2),DATEPART(MONTH,GETDATE()))
IF(LEN(@m)=1)
BEGIN
set @m='0'+@m
END
SELECT @d = CONVERT(VARCHAR(2),DATEPART(DAY,GETDATE()))
IF(LEN(@d)=1)
BEGIN
set @d='0'+@d
END
SET @dateStr = @y+@m+@d
--得到最后的编号字符串
SET @sql='SELECT @num=COUNT(1)+1 FROM '+@tableName+' WHERE DATEDIFF(DAY, '+@createDT_ColName+',GETDATE())=0'
exec sp_executesql @sql, N'@num INT OUTPUT',@num OUTPUT
SET @lastStr = CONVERT(VARCHAR(20),@num)
IF @num<10
BEGIN
SET @lastStr = '00'+CONVERT(VARCHAR(10),@num)
END
ELSE IF @num<100
BEGIN
SET @lastStr = '0'+CONVERT(VARCHAR(10),@num)
END
--组合字符串
SET @result = @prefix + @dateStr + '-' + @lastStr
SELECT @result AS OrderNO
END
GO
生成工单号的存储过程
最新推荐文章于 2023-03-31 13:46:10 发布