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

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

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

    鷹翔宇空

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

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

    -- ==================================================
    -- 名稱:得到單據(jù)流水號(hào)
    -- 實(shí)現(xiàn)功能:取得對(duì)應(yīng)表的計(jì)數(shù)器,實(shí)現(xiàn)流水號(hào)功能.
    -- 調(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
    ??? -- 取得編號(hào)后,計(jì)數(shù)器加1
    UPDATE T_OrderList SET FIncCount = FIncCount +1 -- 函數(shù)中不允許執(zhí)行UPDATE,這種情況要怎么處理.
    RETURNS @OrderNo

    -- 系統(tǒng)單據(jù)表,存放系統(tǒng)所以業(yè)務(wù)單據(jù)列表,存有生成流水號(hào)計(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ù)流水號(hào)
    CREATE? TABLE? T_Order(?
    ?????????? FID? int? IDENTITY? (1,? 1)? NOT? NULL,?
    ?????????? FNumber varchar(40),? -- 單據(jù)流水號(hào)?
    ?????????? FOrderInfo varchar(30)
    ?????????? )?

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

    -- 取出當(dāng)前單據(jù)流水號(hào)
    SELECT @FIncCount=FIncCount FROM T_OrderList WHERE FID=@CodeC
    -- 流水號(hào)加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ǔ)句運(yùn)算出的結(jié)果中調(diào)用.如前面寫(xiě)的SELECT P_OnlyC(FId)? as? 流水號(hào),? *? from (select sum(..) from tab..) Tab1? 所以我想用函數(shù),但函數(shù)里又沒(méi)辦法執(zhí)行遞增流水號(hào):

    CREATE? FUNCTION? F_LT_GetOrderNo(@ID? int)?
    AS? RETURN? VARCHAR(32)?
    ?????????? DECLARE? @OrderNo? int?
    ?????????? SELECT? @OrderNo? =? FIncCount? FROM? T_OrderList? WHERE? FID? =? @ID?
    ?????? --? 取得編號(hào)后,計(jì)數(shù)器加1?
    ?????????? UPDATE? T_OrderList? SET? FIncCount? =? FIncCount? +1? --? 函數(shù)中不允許執(zhí)行UPDATE?
    ?????????? RETURNS? @OrderNo
    ??????????
    ??????????
    ??????????
    CREATE PROCEDURE n_GetBillNo
    @billType? char(2),--單據(jù)類(lèi)型
    @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)前序號(hào)
    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ù)被鎖定,請(qǐng)求超時(shí)!'
    ?? Goto Failed
    ?? end
    --是否是新的一月
    if Convert(char(8),getdate(),112)<>@date
    ?Set @NowNo=1
    ?else
    ?Set @NowNo=@NowNo+1

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

    --取得單號(hào)
    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 閱讀(574) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 技術(shù)文摘
    主站蜘蛛池模板: 无遮挡免费一区二区三区 | 国产成人精品亚洲一区| 亚洲精品WWW久久久久久| 久久精品免费电影| 久久夜色精品国产噜噜亚洲a| 国产成人aaa在线视频免费观看| 国产做国产爱免费视频| 亚洲精品人成电影网| 免费A级毛片无码A∨男男| 免费毛片a线观看| 亚洲精华液一二三产区| 亚洲精品高清无码视频| 好爽…又高潮了毛片免费看| a毛看片免费观看视频| 亚洲综合成人婷婷五月网址| 久久夜色精品国产亚洲| 成人午夜性A级毛片免费| 色www永久免费| 99亚洲乱人伦aⅴ精品| 亚洲视频在线观看不卡| 国产亚洲老熟女视频| 午夜神器成在线人成在线人免费| 国产免费AV片在线观看| 国产成人久久精品亚洲小说| 亚洲精品自拍视频| 久久亚洲精品无码观看不卡| 毛片a级三毛片免费播放| 日韩精品免费视频| 美女黄色毛片免费看| 亚洲精品中文字幕无乱码麻豆| 亚洲国产精品无码久久SM| 四虎永久成人免费影院域名| 青青久在线视频免费观看| 免费成人高清在线视频| 亚洲精品偷拍视频免费观看| 亚洲精品无码久久久久YW| 亚洲精品欧洲精品| 亚洲精品免费在线观看| 亚洲精品国产自在久久 | 日韩黄色免费观看| 亚洲免费福利在线视频|