存儲進程完成定單號,流水單號(8位)的具體思緒。本站提示廣大學習愛好者:(存儲進程完成定單號,流水單號(8位)的具體思緒)文章只能為提供參考,不一定能成為您想要的結果。以下是存儲進程完成定單號,流水單號(8位)的具體思緒正文
此文章是自創園中的列位年夜神的,自己只是略作修正。有欠好的處所,迎接吐槽。
先寫完成思緒,然後再貼上代碼
1.樹立存儲進程,聲明輸入參數@indentNum,輸入定單號
2.普通定單號由兩部門構成,日期和後續的定單號,依據需求看日期前面須要跟若干位數字,此文為8位。
3.界說函數@date為日期部門,賦值。
4.斷定表中能否存在當日的數據,依據日期停止查詢,普通定單表中都邑有日期的吧。
5.假如表中存在,則在其表中最年夜的定單上+1,假如沒有則新增當日的第一條定單號。
注:個中會用到一個平凡不怎樣用到的函數replicate,由於在最年夜的定單上+1的時刻須要將高位的0補上。
語法:print replicate('0',3) ————則會輸入3個0
USE MyBookShop
GO
--假如存在存儲進程則刪除
IF OBJECT_ID('PROC_NumIndent') IS NOT NULL
DROP PROC PROC_NumIndent
GO
--新建存儲進程,用於臨盆流水單號
CREATE PROC PROC_NumIndent
@indentNum nvarchar(20) output--流水單號
AS
--日期部門為以後日期。
DECLARE @date nvarchar(20)
set @date = convert(varchar(20),getdate(),112)--格局為20130117
--斷定表中能否存在當日的數據
DECLARE @CountMax nvarchar(20)
select @CountMax = max(id) from testst where convert(varchar(10),rtrim(ltrim(date))) = convert(varchar(10),rtrim(ltrim(getdate())))
--假如@CountMax不等於空,則表現表中有當日的數據
IF (@CountMax <> '')
BEGIN
declare @num nvarchar(20)
--在明天取到的最年夜定單上取最左邊(前面)8位數轉為int型加一
set @num = convert(varchar(20),convert(int,right(@CountMax,8))+1)
--用replicate函數,反復賦值‘0',補上高位
set @num = replicate('0',8-len(@num))+@num
set @indentNum = @date+ @num
print @indentNum
END
--不存在就以日期加‘00000001'為昔日的第一條定單
ELSE
BEGIN
set @indentNum = @date + '00000001'
PRINT @indentNum
END
GO
--以下是履行存儲進程
DECLARE @indentNum nvarchar(20)
EXEC PROC_NumIndent @indentNum
還有願望列位年夜神可否供給一個更好的關於日期停止比擬的辦法。
就是斷定2個日期能否相等,數據庫傍邊是datatime格局的,可是斷定的話就比擬蛋疼了。
還想只取日期部門而不取時光部門,停止斷定。願望年夜家多來吐槽。