SQLserver 按规则生成单号的存储过程

USE [CmxSystem]
GO
/****** Object:  StoredProcedure [dbo].[getorderno]    Script Date: 2018/10/11 星期四 17:13:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[getorderno](
@ordertype VARCHAR(10)
)
AS 
BEGIN   ------ 2018--7--23
DECLARE @letid INT   -----字母ID
DECLARE @number INT ---数字
DECLARE @nowdate VARCHAR(20)  ---今天日期
DECLARE @letter VARCHAR(10) ----字母
DECLARE @neworderno VARCHAR(30) -----新单号

SET @number=0
SET @letid=0
SET @letter=''

SELECT @nowdate=RIGHT(CONVERT(VARCHAR(8),GETDATE(),112),6)  ----取日期
SELECT @number=OrderNumber,@letid=LetId FROM dbo.OrderNumbers WHERE OrderType=@ordertype

IF(@number=0)
	BEGIN
		SET @neworderno='' --设置值
		SELECT @neworderno --赋值
	END


IF NOT EXISTS(SELECT TOP 1 1 FROM ordernumbers WHERE orderdate=@nowdate AND OrderType=@ordertype)----新的日期
BEGIN
   UPDATE ordernumbers SET LetId=1,OrderNumber=1, orderdate=@nowdate WHERE OrderType=@ordertype   ----初始化字母
   SELECT TOP 1 @letter=Letter FROM OrderNumbersLetter WHERE  LetId=1
   SET @neworderno=@ordertype+@nowdate+@letter+ '000001'
   SELECT @neworderno
END


IF(@number>999998) ----流水号达到999999时,字母流水号下一个
BEGIN

	SET @letid=@letid+1
	SELECT TOP 1 @letter=Letter FROM OrderNumbersLetter WHERE  LetId=@letid
	UPDATE OrderNumbers SET letid=@letid,ordernumber=1   WHERE OrderType=@ordertype 
	SET @neworderno=@ordertype+@nowdate+@letter+ '000001'
	SELECT @neworderno
END
ELSE
BEGIN
	SELECT TOP 1 @letter=Letter FROM OrderNumbersLetter WHERE  LetId=@letid
	SET @number=@number+1
	UPDATE dbo.OrderNumbers SET OrderNumber=@number WHERE OrderType=@ordertype 
	SET @neworderno=@ordertype+@nowdate+@letter+ RIGHT('00000'+CAST(@number AS VARCHAR(10)),6) 
	SELECT @neworderno
	end
END

 

你可能感兴趣的:(Sql,server,数据库)