日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Sql Server中利用自定義函數完成單據流水號的設計

瀏覽:279日期:2023-11-02 17:51:14

流水號是現在各類系統中單據的必備字段,因為流水號很容易標識一個新的單據.之前我也做了這么一個系統,流水號的格式為:單據前綴+業務日期+幾位順序編號.知道了流水號的固定格式,設計流水號就非常方便了.在SqlServer中,我們可以通過客戶端程序來生成新的流水號,也可以利用存儲過程來生成.在實際的項目中,我覺得利用自定義函數來生成非常方便,方便存儲過程調用,也方便客戶端的調用.說了一大堆廢話,來看代碼吧.1.主調用函數,由于在設計過程中有很多類似單據表,而且每個單據表包含了一個相同的流水號字段,所以為了方便代碼調用,提供了對應表的輸入參數./**//*獲取一條新的單據流水號-流水號格式為 @PrefixString+'-'+當前日期+4位順序編號:CGRK-20070509-0001*/

CREATE FUNCTION dbo.fn_GetNewFlowNumber(@SheetTableName varchar(50))RETURNS varchar(50); AS; BEGIN

--流水號前綴 declare @PrefixString varchar(50) --流水號后綴數字的位數 declare @PostfixLength int; --定義好當日單據所有的流水號數據表 declare @Table table(SheetNo varchar(50)) --1.取得單據的最后一條SheetNo IF @SheetTableName=null OR @SheetTableName='' return '' /**//*庫存部分*/ --其他入庫 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_StoreInSheet') BEGIN SET @PrefixString='QTRK' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_StoreInSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --其他出庫 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_StoreOutSheet') BEGIN SET @PrefixString='QTCK' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_StoreOutSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --轉倉 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_StoreTransferSheet') BEGIN SET @PrefixString='CKZC' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_StoreTransferSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --盤點 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_StoreCheckSheet') BEGIN SET @PrefixString='CKPD' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_StoreCheckSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END /**//*采購單據操作部分*/ --請購單 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_PurchaseRequestSheet') BEGIN SET @PrefixString='QGD' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_PurchaseRequestSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --采購訂單 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_PurchaseOrderSheet') BEGIN SET @PrefixString='CGDD' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_PurchaseOrderSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL

END --采購詢價單 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_PurchaseQuotationSheet') BEGIN SET @PrefixString='CGXJ' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_PurchaseQuotationSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --采購入庫單 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_PurchaseInSheet') BEGIN SET @PrefixString='CGRK' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_PurchaseInSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --采購退貨 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_PurchaseReturnSheet') BEGIN SET @PrefixString='CGTH' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_PurchaseReturnSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --付款單 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_PurchasePaymentSheet') BEGIN SET @PrefixString='CGFK' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_PurchasePaymentSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END /**//*銷售單據操作部分*/ --銷售詢價 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_SaleQuotationSheet') BEGIN SET @PrefixString='XSXJ' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_SaleQuotationSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --銷售訂單 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_SaleOrderSheet') BEGIN SET @PrefixString='XSDD' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_SaleOrderSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --銷售出庫 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_SaleOutSheet') BEGIN SET @PrefixString='XSCK' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_SaleOutSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --銷售退貨 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_SaleReturnSheet') BEGIN SET @PrefixString='XSTH' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_SaleReturnSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END --銷售付款 ELSE IF; LOWER(@SheetTableName)=LOWER('AT_SalePaymentSheet') BEGIN SET @PrefixString='XSFK' SET @PostfixLength=4 INSERT INTO @Table(SheetNo) SELECT SheetNo FROM AT_SalePaymentSheet WHERE DateDiff(d,CreateTime,dbo.fn_getNowDate())=0 OR CreateTime=NULL END

/**//*不屬于任何單據,返回空的單號*/ ELSE RETURN '' /**//* 存在一個當日同前綴的流水號的條件: 1.流水號總長度相同 2.相同的流水號前綴 3.相同的中間日期部分; */ --當日日期部分字符串 declare @DateString varchar(8) SET @DateString=dbo.fn_FormatDate(dbo.fn_GetNowDate()) --記錄中最后一條流水號 declare @LastSheetNo varchar(50) /**//*--定義好相關參數,比較是否有相同的流水號前綴*/ --存在,獲取最后一條流水+1; SELECT TOP 1 @LastSheetNo=SheetNO FROM @Table WHERE LEN(SheetNO)=len(@PrefixString)+10+@PostfixLength AND; LEFT(SheetNO,len(@PrefixString+'-'))=@PrefixString+'-' AND LEFT(SheetNO,len(@PrefixString+'-'+@DateString+'-'))=@PrefixString+'-'+@DateString+'-' ORDER BY; SheetNo DESC --return 'ssss' IF @LastSheetNo=NULL return @PrefixString+'-'+@DateString+'-'+dbo.fn_FillNumberWithZero(1,@PostfixLength) ELSE return @PrefixString+'-'+@DateString+'-'+dbo.fn_FillNumberWithZero(convert(int,right(@LastSheetNo,@PostfixLength))+1,@PostfixLength) return ''

END

2.相關函數

/**//*生成流水號后面幾位數字字符的相關函數不足位數在左邊用0填充*/CREATE FUNCTION dbo.fn_FillNumberWithZero(--填充的數字@num int,--總位數@len int)RETURNS varchar(50) AS; BEGIN --如果傳入的流水號大于總的長度,那么直接返回流水號字符串格式 if(len(Convert(varchar(50),@num))>@len) return Convert(varchar(50),@num) ELSE BEGIN --需要填充0的位數 declare @NeedFillLen int set @NeedFillLen=@Len-len(Convert(varchar(50),@num)) --獲取需要填充的0的字符串 declare @i int set @i=0 declare @temp varchar(50) set @temp=N'' while @i<@NeedFillLen BEGIN SET @temp=@temp+'0' SET @i=@i+1 END --返回組后的字符串 return @temp+Convert(varchar(50),@num) END return ''END

/**//*流水號函數相關函數返回某個日期的格式化形式如20070509

*/CREATE FUNCTION dbo.fn_FormatDate(@Date datetime)RETURNS char(8) AS; BEGIN declare @year char(4) declare @month char(2) declare @day char(2) set @year=convert(char(4),year(@Date)) set @month=convert(char(4),month(@Date)) set @day=convert(char(4),day(@Date)) if len(@month)=1 set @month=N'0'+@month if len(@day)=1 set @day=N'0'+@day return @year+@month+@dayEND

/**//*獲取當天日期*/

CREATE FUNCTION dbo.fn_GetNowDate()RETURNS DateTime AS; BEGIN declare @nowDate datetime select @nowDate=NowDate FROM v_DateNow return @nowDateEND

注意這里由于sqlserver的自定義函數無法直接獲取日期(無法調用getdate()函數),所以我們通過視圖的方式來獲取服務器的時間.視圖如下:/**//*獲取當前系統日期這個視圖主要供自定義函數調用,切勿刪除!!!?。。?!*/

CREATE VIEW dbo.v_DateNowASSELECT GETDATE() AS NowDate

全部函數完畢.如何調用呢?很簡單:比如需要入庫單的新流水號:select dbo.fn_GetNewFlowNumber('AT_StoreCheckSheet')是不是非常方便?

標簽: Sql Server 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品s色| 日本不良网站在线观看| 成人在线网站| 久久精品九色| 日韩在线视频精品| 国产精品av一区二区| 亚洲激情精品| 日韩一区二区三免费高清在线观看 | 视频一区二区欧美| 亚洲人www| 国产日本亚洲| 国产一区二区三区不卡视频网站| 91视频一区| 亚洲精品一二三区区别| 一区二区电影| 久久丁香四色| 国产麻豆久久| 三级亚洲高清视频| 国产精品久久久久久模特| av资源亚洲| 亚洲欧美成人综合| 免费在线亚洲欧美| jiujiure精品视频播放| 青草国产精品久久久久久| 福利精品一区| 久久亚洲精品伦理| 精品国产乱码久久久| 欧美91福利在线观看| 日韩三级一区| 日韩欧美一区二区三区免费看| 好看的av在线不卡观看| 91在线成人| 久久在线免费| 国产无遮挡裸体免费久久 | 国模精品一区| 亚洲一区激情| 成人一区而且| 亚洲精品婷婷| 99久久九九| 国产精品自在| 自拍日韩欧美| 精品三级av在线导航| 国产精品外国| 97国产精品| 中文字幕av一区二区三区人| 久久97久久97精品免视看秋霞| 亚洲激情中文在线| 久久只有精品| 日韩和欧美的一区| 亚洲激情五月| 中文字幕人成乱码在线观看 | 日韩二区在线观看| 激情综合自拍| 国产精品精品国产一区二区| 日韩精品免费观看视频| 久久久久亚洲| 精品国产91| 国产无遮挡裸体免费久久 | 国产一区91| 日韩三区在线| 久久一区国产| 欧美日韩精品一区二区三区视频 | 免费在线观看一区二区三区| 精品高清久久| 欧美视频二区| 久久福利一区| 99久久久久国产精品| 久久精品亚洲一区二区| 亚洲精品国模| 中文精品在线| 欧美亚洲激情| 日韩成人亚洲| 岛国av在线网站| 欧美激情久久久久久久久久久| 亚洲欧美在线综合| 爽好多水快深点欧美视频| 激情国产在线| 国产一区二区三区天码| 日韩精品亚洲专区在线观看| 日韩一区二区免费看| 日本少妇一区| 久久久9色精品国产一区二区三区| 久久精品一区二区三区中文字幕| 欧美日韩1区2区3区| 日韩美女国产精品| 天堂久久av| 日韩视频1区| 777久久精品| 日韩激情综合| 69堂免费精品视频在线播放| 日韩av不卡一区二区| 日韩黄色av| 欧美亚洲三区| 久久精品99国产精品| 亚洲精品护士| 欧美偷窥清纯综合图区| 国产欧美日韩| 美女高潮久久久| 久久精品亚洲| 国产亚洲一区二区手机在线观看| 久久久久久久久丰满| 99热国内精品| 亚洲欧美日韩精品一区二区| 久热re这里精品视频在线6| 亚洲欧美网站在线观看| 欧美亚洲tv| 成人午夜亚洲| 亚洲福利免费| 视频一区中文字幕| 中文字幕av一区二区三区四区| 亚洲欧美在线综合| 欧美极品一区二区三区| 97精品国产福利一区二区三区| 久久久影院免费| 蜜臀av一区二区三区| 日韩精品乱码av一区二区| 久久久免费人体| 韩国精品主播一区二区在线观看| 精品一区免费| 亚洲狼人精品一区二区三区| 久久精品99国产精品| 欧美激情另类| 手机精品视频在线观看| 欧美另类中文字幕| 中文字幕色婷婷在线视频| 亚洲一区二区三区免费在线观看| 91精品美女| 久久97久久97精品免视看秋霞| 日韩视频网站在线观看| 欧美va天堂在线| 日韩精品视频在线看| 国产a亚洲精品| 不卡一区综合视频| 日韩国产欧美视频| 国产精品久久久久久久免费观看 | 欧美在线看片| 亚洲黄色免费av| 日韩精品一二区| 国产精品对白久久久久粗| 私拍精品福利视频在线一区| 伊人久久亚洲| 国产精品mm| 亚洲作爱视频| 欧美国产极品| 亚洲免费网址| 超碰在线99| 日本国产亚洲| 三级小说欧洲区亚洲区| 综合激情视频| 亚洲精品福利电影| 欧美一区91| 亚洲欧美日韩专区| 国内揄拍国内精品久久| 中文字幕视频精品一区二区三区| 色婷婷色综合| 日本不卡在线视频| 伊人久久大香线蕉av不卡| 国产免费久久| 日韩中文字幕av电影| 国产美女高潮在线| 日韩精品中文字幕吗一区二区| 电影亚洲精品噜噜在线观看| 日韩二区三区在线观看| 在线日韩一区| 日韩成人免费| 国产精品sm| 婷婷精品久久久久久久久久不卡| 久久久久欧美精品| 乱一区二区av| 亚洲精品在线a| 免费精品国产| 神马久久午夜| 国产精品亚洲综合久久| 日韩午夜在线| 日本在线精品| 国产一区二区三区天码| 青青草国产精品亚洲专区无| 日韩视频一区| 激情亚洲影院在线观看| 欧美黄色精品| 国产精品亚洲欧美一级在线| 中文字幕成人| 男女性色大片免费观看一区二区 | 在线精品观看| 91成人精品视频| 日韩国产综合| 国产伦精品一区二区三区视频| 久久亚洲一区| 美女久久一区| 亚洲欧美视频一区二区三区| 欧美色图国产精品| 99视频精品| 尹人成人综合网| 99精品视频精品精品视频| 青青青免费在线视频| 精品精品99| 国产一区二区三区天码| 精品国产黄a∨片高清在线| 国产精品伦一区二区| 欧美日韩亚洲一区三区|