并发取单据号的问题? |
答題得分者是:P.D.
|
zgjob
一般會員 發表:5 回覆:4 積分:1 註冊:2008-05-22 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
ron_xin
一般會員 發表:3 回覆:3 積分:1 註冊:2006-08-21 發送簡訊給我 |
[code sql]
--============================================= --过程用于为新插入的记录生成关键字 --参数说明: @TabName 要插入的表名 -- @FieName 要生成关键字的字段名 -- @PreCode 默认的前缀 --eg:exec NewTableDataNO 'orderm','single_no','DD' --============================================= CREATE PROCEDURE [NewTableDataNO] @TableName varchar(50), @FieldName varchar(50), @PreCode varchar(2) AS Declare @TmpPreCode varchar(100),@Sql varchar(1000), @NewNo varchar(50), @I varchar(50) if not exists(select * from tempdb.dbo.sysobjects where Name = '##TmpNewNo') Create table ##TmpNewNo(RandF float, NewNo varchar(50)) Set @TmpPreCode = @PreCode --找当天的最大编号 select @TmpPreCode = @TmpPreCode CONVERT(char(6), Getdate(), 12), @I = cast(RAND() as varchar(50)) set @sql = 'insert ##TmpNewNo(RandF, NewNo) select ' @I ', isnull(max(' @FieldName '), '''')' ' from ' @TableName ' Where left(' @FieldName ', len(''' @TmpPreCode ''')) = ''' @TmpPreCode '''' exec(@Sql) select @NewNo = NewNo from ##TmpNewNo where RandF = @I delete from ##TmpNewNo where RandF = @I --生成新的编号 if @NewNo = '' set @I = '000' else Set @I = right(@NewNo, 3) set @I = cast(cast(@I as int) 1 as varchar(3)) set @I = case len(@I) when 0 then '001' when 1 then '00' @I when 2 then '0' @I else @I end select @TmpPreCode @I [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |