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

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

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

    鷹翔宇空

    學習和生活

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

    -- ==================================================
    -- 名稱:得到單據流水號
    -- 實現功能:取得對應表的計數器,實現流水號功能.
    -- 調用示例: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 -- 計數器
    )

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

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

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

    -- 現系統要求自動運算,將運算后的數據填充到T_Order業務表中.填充時各記錄要生成不同的單據流水號.我原先的實現想法是用存儲過程:
    CREATE??? PROCEDURE P_OnlyC
    ? @CodeC VARCHAR(48) OUTPUT
    AS
    DECLARE @OnlyC VARCHAR(48)
    ,@FIncCount INTEGER

    -- 取出當前單據流水號
    SELECT @FIncCount=FIncCount FROM T_OrderList WHERE FID=@CodeC
    -- 流水號加1
    SELECT @FIncCount = @FIncCount +1

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

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

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

    CREATE? FUNCTION? F_LT_GetOrderNo(@ID? int)?
    AS? RETURN? VARCHAR(32)?
    ?????????? DECLARE? @OrderNo? int?
    ?????????? SELECT? @OrderNo? =? FIncCount? FROM? T_OrderList? WHERE? FID? =? @ID?
    ?????? --? 取得編號后,計數器加1?
    ?????????? UPDATE? T_OrderList? SET? FIncCount? =? FIncCount? +1? --? 函數中不允許執行UPDATE?
    ?????????? RETURNS? @OrderNo
    ??????????
    ??????????
    ??????????
    CREATE PROCEDURE n_GetBillNo
    @billType? char(2),--單據類型
    @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
    --設定延時
    SET LOCK_TIMEOUT 5000

    --取當前序號
    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='數據被鎖定,請求超時!'
    ?? Goto Failed
    ?? end
    --是否是新的一月
    if Convert(char(8),getdate(),112)<>@date
    ?Set @NowNo=1
    ?else
    ?Set @NowNo=@NowNo+1

    --更新當前序列號和設置最后更新日期
    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 閱讀(579) 評論(0)  編輯  收藏 所屬分類: 技術文摘
    主站蜘蛛池模板: 噜噜嘿在线视频免费观看| 黄网站色视频免费在线观看的a站最新| 亚洲色图黄色小说| 亚洲天堂电影在线观看| 亚洲日本一线产区和二线产区对比| 曰批全过程免费视频免费看| 国产午夜无码片免费| a拍拍男女免费看全片| 日韩免费视频播放| 亚洲春色在线视频| 亚洲综合校园春色| 一区二区三区免费视频网站| 久9这里精品免费视频| 日韩激情无码免费毛片| 亚洲AV无码专区在线观看成人 | 亚洲激情视频网站| 久久精品成人免费国产片小草| 97视频热人人精品免费| 亚洲色成人中文字幕网站| 亚洲午夜精品国产电影在线观看| 久久精品免费大片国产大片| 亚洲av日韩av不卡在线观看| 亚洲精品女同中文字幕| 国产成人精品久久免费动漫| 亚洲AV无码一区二区三区电影| 亚洲精品99久久久久中文字幕| 亚洲a级片在线观看| 亚欧免费无码aⅴ在线观看| 亚洲伊人久久精品| 国产免费av一区二区三区| 亚洲中文无码mv| 毛片免费在线播放| 亚洲成a人片在线观看中文!!!| 夜夜爽免费888视频| a级毛片免费观看网站| 亚洲精品一级无码中文字幕| 日韩午夜理论免费TV影院| 亚洲中文久久精品无码| 国产精品免费αv视频| 亚洲日本乱码一区二区在线二产线| 国产精品久久香蕉免费播放|