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

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

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

瀏覽:275日期: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久久,三上悠亚国产精品一区二区三区
亚洲成人va| 亚洲性色视频| 国产毛片久久| 红桃视频国产精品| 黄色成人在线网址| 中文国产一区| 黄色免费成人| 久久福利毛片| 免费在线观看成人| 日韩视频免费| 热久久国产精品| 日本欧美韩国一区三区| 日韩高清一区二区| 精品国产欧美| 久久精品av| 免费观看日韩电影| 久久av免费| 久久久久美女| 蜜桃视频免费观看一区| 国产精品日韩精品中文字幕| 97精品一区| 免费视频国产一区| 日韩精品视频网| 激情久久99| 日韩欧美三级| 国产精品日本| 国产精品久久久网站| 日韩欧美中文| 亚洲图片久久| 国产videos久久| 自拍日韩欧美| 91p九色成人| 日韩精品网站| 911精品国产| 99国产精品免费视频观看| 亚洲影院天堂中文av色| 久久影院资源站| 亚洲黄色影院| 老牛国内精品亚洲成av人片 | 日韩国产在线观看| 视频一区中文字幕精品| 精品国产不卡一区二区| 日韩亚洲国产欧美| 欧美精品第一区| 婷婷亚洲五月| 日韩三级久久| 国产欧美一区二区三区精品酒店| 蜜桃av一区二区| 亚洲ww精品| 日韩av有码| 亚洲日本在线观看视频| 国产一区二区三区黄网站| 视频一区中文字幕国产| 色偷偷色偷偷色偷偷在线视频| 国产精品日韩精品在线播放| 日本蜜桃在线观看视频| 香蕉视频成人在线观看| 美女高潮久久久| 综合一区在线| 亚洲国产日韩欧美在线| 久久婷婷国产| 综合激情网站| 欧美1级日本1级| 国产一区二区三区久久| 青草久久视频| 日韩中文字幕麻豆| 麻豆精品视频在线观看视频| 一区二区三区四区在线观看国产日韩| 国产伦久视频在线观看| 久久国产精品久久w女人spa| 日韩精品2区| 欧美黄色一区二区| 亚洲狼人精品一区二区三区| 久久中文字幕av| 国产+成+人+亚洲欧洲在线| 91综合久久爱com| 免费精品视频在线| 中文精品视频| 亚洲国产成人精品女人| 电影91久久久| 狂野欧美性猛交xxxx| 玖玖玖国产精品| 久久精品一区二区不卡| 日韩欧美视频专区| 日韩理论视频| 91免费精品| 国产一区二区三区天码| 久久的色偷偷| 久久精品一区| 精品中文字幕一区二区三区 | 99国产精品久久久久久久成人热| 日韩大片在线播放| 国产精品亲子伦av一区二区三区| 国产精久久久| 亚洲免费福利一区| 丝袜诱惑制服诱惑色一区在线观看 | 国产亚洲精品v| 精品九九在线| 久久69成人| 成人日韩av| 国产a亚洲精品| 都市激情国产精品| 国产成人精选| 动漫av一区| 精品一区二区三区四区五区| 麻豆久久久久久| 日本一二区不卡| 福利视频一区| 99tv成人| 久久亚洲国产精品一区二区| 亚洲一二三区视频| 清纯唯美亚洲综合一区| 国产精品草草| 91亚洲成人| 成人看片网站| 狠狠色狠狠色综合日日tαg| 蜜臀久久99精品久久久久宅男| 日韩av电影一区| 亚洲有吗中文字幕| 欧美日韩中文| 国产精品久久久久久久免费观看| 一本色道精品久久一区二区三区| 亚洲三级网址| 日本一区二区三区中文字幕| 久久国产生活片100| 久久精品亚洲| 激情综合亚洲| 亚洲综合婷婷| 国产精品theporn| 成人羞羞在线观看网站| 石原莉奈在线亚洲三区| 国产精品1区| 黄在线观看免费网站ktv| 在线精品亚洲欧美日韩国产| 99国产精品久久久久久久成人热 | 国产视频一区在线观看一区免费| 欧美精品国产一区| 国产精品欧美大片| 欧美天堂视频| 综合激情视频| 国产一区不卡| 亚洲欧美日韩在线观看a三区| 91嫩草亚洲精品| 久久激情一区| 婷婷视频一区二区三区| 国产精品久久| 免费精品国产的网站免费观看| 精品一区二区三区四区五区| 日韩免费久久| 偷拍亚洲精品| 日韩毛片视频| 中文字幕亚洲影视| 国模大尺度视频一区二区| 亚洲国产不卡| 麻豆精品久久| 日韩一区精品视频| 成人午夜亚洲| 综合亚洲视频| 捆绑调教日本一区二区三区| 免费精品视频在线| 欧美黑人做爰爽爽爽| 神马午夜在线视频| 亚洲欧洲国产精品一区| 日本高清不卡一区二区三区视频| 国产精品久久久久久久久免费高清 | 日韩精品免费一区二区在线观看| 国产日韩欧美高清免费| 粉嫩av一区二区三区四区五区 | 午夜精品一区二区三区国产| 91九色综合| 婷婷精品进入| 精品久久影院| 91精品福利观看| 蜜臀91精品国产高清在线观看| 日韩欧美三级| 免播放器亚洲| 欧美freesex黑人又粗又大| 欧美午夜三级| 欧美特黄一级| 水蜜桃精品av一区二区| 欧美视频二区| 亚洲精品护士| 亚洲一区二区三区高清| 另类中文字幕国产精品| 精品久久一区| 久久不卡日韩美女| 色8久久久久| 久久99伊人| 午夜av成人| 国产成人在线中文字幕| 亚洲精品大全| 蜜臀久久久99精品久久久久久| 欧美日韩国产在线观看网站 | 精品一区二区三区在线观看视频| 国产精品videossex久久发布 | 日韩久久一区| 黄色成人精品网站| 日本久久成人网| 精品久久久中文字幕| 日韩不卡一二三区|