SQL 存儲過程示例02

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--獲取銷售訂單編號
ALTER PROCEDURE [dbo].[DCM_GenerateSaleOrderNo] 
AS
DECLARE @ErrorCode     nvarchar(10)
DECLARE @ErrorMsg      nvarchar(255)
DECLARE @OrderNo       nvarchar(50)
DECLARE @OldOrderNo    nvarchar(50)
DECLARE @MaxSeqNo      int
DECLARE @MaxSeqString  nvarchar(10)
DECLARE @iCount int
BEGIN
	--SO20100427000
	--銷售訂單號爲SO + YYYYMMDD + (三位最大流水號 + 1) 
	SET @iCount = 0
	SET @ErrorCode = ''
	SET @ErrorMsg = ''
	SET @OldOrderNo = ''
	SET @MaxSeqNo = 0
	SET @OrderNo = 'SO' + convert(nvarchar(10),getdate(),112)
	
	BEGIN TRY
		BEGIN TRANSACTION
		SELECT @OldOrderNo =CodingRoleString  FROM TBL_CODINGROLESTRINGTEMP WITH (UPDLOCK) WHERE TABLENAME='DCM_ORDER'
--		WHILE @iCount<1000000
--			BEGIN 
--				PRINT @iCount	
--				SET @iCount = @iCount + 1
--			END

		IF @OldOrderNo<>''
			BEGIN
				IF @OrderNo = substring(@OldOrderNo,1,10)	
					BEGIN
						SET @MaxSeqNo = cast(substring(@OldOrderNo,11,4) as int)	
						SET @MaxSeqNo = @MaxSeqNo + 1					
					END
				ELSE
					SET @MaxSeqNo = 0
				
				IF @MaxSeqNo>9999
					BEGIN
						SET @ErrorCode = 'E0001'
						SET @ErrorMsg='訂單流水號超出最大限制9999!'
						RAISERROR(@ErrorMsg,1,16)
					END
				ELSE
					BEGIN
						SELECT @MaxSeqString = right('0000' + cast(@MaxSeqNo as nvarchar(10)),4)  
						SET @OrderNo = @OrderNo + @MaxSeqString		 
						UPDATE TBL_CODINGROLESTRINGTEMP SET CodingRoleString=@OrderNo WHERE TABLENAME='DCM_ORDER'
					END
			END
		ELSE
			BEGIN
				SET @ErrorCode = 'E0002' 
				SET @ErrorMsg='臨時表不存在DCM_ORDER的訂單編號數據,請檢查!'
				RAISERROR(@ErrorMsg,1,16)
			END
		
		SELECT @OrderNo AS OrderNo		
		COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
		ROLLBACK TRANSACTION
		IF @ErrorCode=''
			SET @ErrorMsg='意外出錯!'
		RAISERROR(@ErrorMsg,1,16)
	END CATCH
END

GO






發佈了24 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章