<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學(xué)習(xí)和生活

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
    ?本文摘自:http://searchdatabase.techtarget.com.cn/tips/44/2333544.shtml?BLK=030001&NODE=1003

    -- ==================================================
    -- 名稱:得到單據(jù)流水號
    -- 實(shí)現(xiàn)功能:取得對應(yīng)表的計(jì)數(shù)器,實(shí)現(xiàn)流水號功能.
    -- 調(diào)用示例:SELECT F_LT_GetOrderNo(FId) as FID, * from Tab1 T1
    ??????????????????? left outer join T_OrderList T2 on T1.FTabID = T2.FID
    -- ==================================================
    CREATE TABLE T_OrderList(
    FID int IDENTITY (1, 1) NOT NULL,
    FIncCount int -- 計(jì)數(shù)器
    )

    CREATE FUNCTION F_LT_GetOrderNo(@ID int)
    AS RETURN VARCHAR(32)
    DECLARE @OrderNo int
    SELECT @OrderNo = FIncCount FROM T_OrderList WHERE FID = @ID
    ??? -- 取得編號后,計(jì)數(shù)器加1
    UPDATE T_OrderList SET FIncCount = FIncCount +1 -- 函數(shù)中不允許執(zhí)行UPDATE,這種情況要怎么處理.
    RETURNS @OrderNo

    -- 系統(tǒng)單據(jù)表,存放系統(tǒng)所以業(yè)務(wù)單據(jù)列表,存有生成流水號計(jì)數(shù)器
    CREATE? TABLE? T_OrderList(?
    ?????????? FID? int? IDENTITY? (1,? 1)? NOT? NULL,?
    ?????????? FIncCount? int? --? 計(jì)數(shù)器?
    ?????????? FOrder varchar(30) not Null
    ?????????? )?

    -- 系統(tǒng)業(yè)務(wù)單據(jù),存放企業(yè)日常業(yè)務(wù)數(shù)據(jù),具體每單有一個(gè)單據(jù)流水號
    CREATE? TABLE? T_Order(?
    ?????????? FID? int? IDENTITY? (1,? 1)? NOT? NULL,?
    ?????????? FNumber varchar(40),? -- 單據(jù)流水號?
    ?????????? FOrderInfo varchar(30)
    ?????????? )?

    -- 現(xiàn)系統(tǒng)要求自動(dòng)運(yùn)算,將運(yùn)算后的數(shù)據(jù)填充到T_Order業(yè)務(wù)表中.填充時(shí)各記錄要生成不同的單據(jù)流水號.我原先的實(shí)現(xiàn)想法是用存儲(chǔ)過程:
    CREATE??? PROCEDURE P_OnlyC
    ? @CodeC VARCHAR(48) OUTPUT
    AS
    DECLARE @OnlyC VARCHAR(48)
    ,@FIncCount INTEGER

    -- 取出當(dāng)前單據(jù)流水號
    SELECT @FIncCount=FIncCount FROM T_OrderList WHERE FID=@CodeC
    -- 流水號加1
    SELECT @FIncCount = @FIncCount +1

    UPDATE T_OrderList SET FIncCount = @FIncCount WHERE FID= @CodeC

    -- 組織各個(gè)編碼
    SELECT @OnlyC = @CodeC? + '-' + @OnlyC
    SELECT @CodeC = @OnlyC; SELECT @OnlyC AS FNumber
    -- print @CodeC
    GO

    但這程方法不能在SELECT語句運(yùn)算出的結(jié)果中調(diào)用.如前面寫的SELECT P_OnlyC(FId)? as? 流水號,? *? from (select sum(..) from tab..) Tab1? 所以我想用函數(shù),但函數(shù)里又沒辦法執(zhí)行遞增流水號:

    CREATE? FUNCTION? F_LT_GetOrderNo(@ID? int)?
    AS? RETURN? VARCHAR(32)?
    ?????????? DECLARE? @OrderNo? int?
    ?????????? SELECT? @OrderNo? =? FIncCount? FROM? T_OrderList? WHERE? FID? =? @ID?
    ?????? --? 取得編號后,計(jì)數(shù)器加1?
    ?????????? UPDATE? T_OrderList? SET? FIncCount? =? FIncCount? +1? --? 函數(shù)中不允許執(zhí)行UPDATE?
    ?????????? RETURNS? @OrderNo
    ??????????
    ??????????
    ??????????
    CREATE PROCEDURE n_GetBillNo
    @billType? char(2),--單據(jù)類型
    @BillOutNo? nvarchar(50) Output

    ?AS

    Begin

    declare @NowNO int
    declare @date char(10)
    declare @Symbol nvarchar(10)
    declare @ErrorMsg nvarchar(200)

    Set NoCount On
    Begin Tran
    --設(shè)定延時(shí)
    SET LOCK_TIMEOUT 5000

    --取當(dāng)前序號
    Select @NowNO=fnumber,@Symbol=fCode,@date=Convert(char(8),fDate,112) from n_BillNo? With(xLock) where fcode=@BillType
    if @@Error<>0
    ?? begin
    ?? Set @ErrorMsg='數(shù)據(jù)被鎖定,請求超時(shí)!'
    ?? Goto Failed
    ?? end
    --是否是新的一月
    if Convert(char(8),getdate(),112)<>@date
    ?Set @NowNo=1
    ?else
    ?Set @NowNo=@NowNo+1

    --更新當(dāng)前序列號和設(shè)置最后更新日期
    update n_BillNo set fNumber=@NowNO,fDate=GetDate() where fcode=@BillType
    if @@Error<>0
    ?? begin
    ?? Set @ErrorMsg='更新外部序列號失敗!'
    ?? Goto Failed
    ?? end

    --取得單號
    Set @BillOutNo=lTrim(@SymBol)+Convert(char(8),GetDate(),112)+Right(('0000'+Convert(varchar,@NowNO)),4)

    Goto Succeed

    Failed:
    ? RaisError(@ErrorMsg,16,1)
    ? Rollback Tran?
    ? Set NoCount Off
    ? Return 1

    Succeed:
    ? Commit Tran
    ? Set NoCount Off
    ? Return 0

    End
    GO

    posted on 2006-03-20 08:51 TrampEagle 閱讀(575) 評論(0)  編輯  收藏 所屬分類: 技術(shù)文摘
    主站蜘蛛池模板: 国产乱子伦精品免费女| 国产国拍精品亚洲AV片| 18勿入网站免费永久| 日韩精品无码区免费专区| 青草草在线视频永久免费| 亚洲AV网站在线观看| 国产精品国产免费无码专区不卡| 亚洲成av人影院| 亚洲成A人片在线播放器| 日本一区二区三区在线视频观看免费 | 国产亚洲真人做受在线观看| 亚洲1区1区3区4区产品乱码芒果 | 亚洲精品99久久久久中文字幕| 久久精品亚洲精品国产色婷| 亚洲爆乳无码精品AAA片蜜桃| 国产成人AV免费观看| 国产一卡2卡3卡4卡无卡免费视频| 精品亚洲一区二区三区在线观看 | 免费国产成人α片| 亚洲A丁香五香天堂网| 一区二区3区免费视频| 女人18毛片水真多免费播放| 亚洲视频在线观看不卡| 国产高潮久久免费观看| 无码日韩精品一区二区免费| 久久精品国产亚洲AV无码偷窥| 丁香花免费完整高清观看| 激情婷婷成人亚洲综合| 真人做A免费观看| 国产亚洲高清在线精品不卡| 曰皮全部过程视频免费国产30分钟| 中文字幕亚洲色图| 成人免费无遮挡无码黄漫视频| 日韩亚洲人成在线| 亚洲日韩国产一区二区三区| 九九久久精品国产免费看小说| 亚洲成a人片在线观看中文动漫| a毛片视频免费观看影院| 亚洲毛片网址在线观看中文字幕| 久久免费动漫品精老司机| 亚洲精品成人片在线观看精品字幕|