获取流水号

原创 2007年10月12日 10:10:00

 

 
 
 
 
/*
Auother :Kangco
CreateDateTime : 2007/09/03
--=======================================================
Subject:获取流水号
Input Parameter:
         @S_TABLE   --表名 例 'PBPM'
         @S_OUTO_FIELD --流水号字段名 例 'ODD_ID'
         @S_SYSEM_TYPE    --系统别 例 'PSS'
         @S_UNIT_NAME --单据名称 例 '1'  
       
--=======================================================
eg:
("PSMPRECM", "SMPREC_ID", "PAS", "1")
exec [dbo].[sp_OutoID] 'PSMPRECM','SMPREC_ID','PAS','1'
exec [dbo].[sp_OutoID] 'PBPM','ODD_ID','PSS','1'
exec [dbo].[sp_OutoID] 'PINVTADJM','ODD_ID','PSS','9'
*/
ALTER PROCEDURE [dbo].[sp_OutoID]
(@S_TABLE varchar(100),
@S_OUTO_FIELD varchar(100),
@S_SYSEM_TYPE varchar(100),
@S_UNIT_NAME varchar(100))
 
AS
/* SET NOCOUNT ON */
        -- DECLARE @S_OUTO_MAXID VARCHAR(100)--自动流水号
-- SET @S_OUTO_MAXID = ''  
 
DECLARE @S_SQL VARCHAR(5000)
DECLARE @S_OUTO_VALUE_MAX VARCHAR(100)
DECLARE @I_OUTO_NUM_LEN INT
SET @S_SQL = '' --查询语句
SET @S_OUTO_VALUE_MAX = '' --最大值
SET @I_OUTO_NUM_LEN = 5 --流水号数字部分的长度
--=============获取流水号设定参数=============
DECLARE @S_CODE_TYPE VARCHAR(100)
DECLARE @S_CBCODE VARCHAR(100)
SET @S_CODE_TYPE = '' 
SET @S_CBCODE = ''
--SELECT * FROM BUNITCODEM
SELECT
--SEQ_NO,dbo.FN_getTypeName('SYSEM_TYPE',SYSEM_TYPE) AS SYSEM_TYPE,dbo.FN_getTypeName('UNIT_NAME',UNIT_NAME)AS UNIT_NAME,
@S_CODE_TYPE = dbo.FN_getTypeName('CODE_TYPE',CODE_TYPE) ,
@S_CBCODE =ISNULL( CBCODE,'') FROM BUNITCODEM WHERE SYSEM_TYPE =@S_SYSEM_TYPE AND UNIT_NAME =@S_UNIT_NAME
PRINT @S_CODE_TYPE
PRINT @S_CBCODE
 
IF(@S_CODE_TYPE = '')
BEGIN
        SELECT 'false' AS OUTOID
        RETURN--如果为空返回
END       
 
--=============获取流水号设定参数END============
 
--=============处理日期部分============
DECLARE @S_YEAR VARCHAR(10)
DECLARE @S_MONTH VARCHAR(10)
DECLARE @S_DAY VARCHAR(10)
DECLARE @DT_DATE VARCHAR(10)
-- SET @S_YEAR = ''
-- SET @S_MONTH = ''
-- SET @S_DAY = ''
 
 
IF(SUBSTRING(@S_CODE_TYPE,LEN(@S_CODE_TYPE)-1,2) = '中历')
        BEGIN
                --PRINT 'ok'
                --中历
                SET @DT_DATE = CONVERT(CHAR(10),dbo.FN_ConvertDate(CONVERT(CHAR(10),GETDATE(),111)),111)
                SET @S_YEAR = SUBSTRING(@DT_DATE,1,3)
                SET @S_MONTH = SUBSTRING(@DT_DATE,5,2)
                SET @S_DAY = SUBSTRING(@DT_DATE,8,2)
                PRINT @S_YEAR + @S_MONTH +@S_DAY
        END
ELSE
        BEGIN
                --PRINT 'NO'
                --公历
                SET @DT_DATE = CONVERT(CHAR(10), GETDATE(), 112)
                SET @S_YEAR = SUBSTRING(@DT_DATE,1,4)
                SET @S_MONTH = SUBSTRING(@DT_DATE,5,2)
                SET @S_DAY = SUBSTRING(@DT_DATE,7,2)
                PRINT @S_YEAR + @S_MONTH +@S_DAY
        END
--Add by Kangco 20070926
--年
IF(CHARINDEX('Y',@S_CODE_TYPE)=0)
        BEGIN
                SET @S_YEAR = ''
        END
--月
IF(CHARINDEX('M',@S_CODE_TYPE)=0)
        BEGIN
                SET @S_MONTH = ''
        END
--日
IF(CHARINDEX('D',@S_CODE_TYPE)=0)
        BEGIN
                SET @S_DAY = ''
        END
       
--=============处理日期部分END============
 
--=============获取流水号数字部分的长度============
--PRINT @S_CODE_TYPE
--PRINT CHARINDEX('9',@S_CODE_TYPE)
--DECLARE @S_MAXID_NUM_LEN VARCHAR(10)
SET @I_OUTO_NUM_LEN =LEN(@S_CODE_TYPE) - CHARINDEX('9',@S_CODE_TYPE) -2 + 1
PRINT @I_OUTO_NUM_LEN
--=============获取流水号数字部分的长度END============
 
--=============获取最大ID号=================
--定义临时表
--CREATE TABLE #TEMPTBL(MAX_ID VARCHAR(100))
CREATE TABLE #TEMPTBL(IDENTITY_ID int IDENTITY(1,1),MAX_ID VARCHAR(100))
--SET @S_SQL = 'INSERT INTO #TEMPTBL SELECT MAX('+@S_OUTO_FIELD+') AS MAX_ID ' +' FROM '+@S_TABLE+''
SET @S_SQL = 'INSERT INTO #TEMPTBL SELECT '+@S_OUTO_FIELD+' AS MAX_ID ' +' FROM '+@S_TABLE+' '
--PRINT @S_SQL
 
EXEC(@S_SQL)
--取自动流水号的最大值 Edit by Kangco 2007/09/12
SELECT TOP 1 @S_OUTO_VALUE_MAX = MAX_ID FROM #TEMPTBL ORDER BY IDENTITY_ID DESC
PRINT @S_OUTO_VALUE_MAX
DROP TABLE #TEMPTBL
--=============获取最大ID号end=================
--PRINT @S_OUTO_VALUE_MAX
 
--=============产生自动ID号=================
 
IF(@S_OUTO_VALUE_MAX <> '')--之前有产生流水号
        BEGIN
                DECLARE @S_LEN INT
                DECLARE @S_PROCESS VARCHAR(200) -- 处理协助变量
                SET @S_LEN = LEN(@S_OUTO_VALUE_MAX)
                --PRINT @S_LEN
                PRINT(SUBSTRING(@S_OUTO_VALUE_MAX,@S_LEN + 1-@I_OUTO_NUM_LEN,@I_OUTO_NUM_LEN))+1
                --处理数字部分
                SET @S_PROCESS = CONVERT(INT,'1' + (SUBSTRING(@S_OUTO_VALUE_MAX,@S_LEN + 1-@I_OUTO_NUM_LEN,@I_OUTO_NUM_LEN))) +1
                SET @S_PROCESS = SUBSTRING(@S_PROCESS,2,LEN(@S_PROCESS)-1)
                PRINT @S_CBCODE + @S_YEAR + @S_MONTH +@S_DAY + @S_PROCESS
                SELECT @S_CBCODE + @S_YEAR + @S_MONTH +@S_DAY + @S_PROCESS AS OUTOID
        END
ELSE --之前没有产生流水号
        BEGIN
                PRINT @S_CBCODE + @S_YEAR + @S_MONTH +@S_DAY +SUBSTRING('000000000000',1,@I_OUTO_NUM_LEN)
                SELECT @S_CBCODE + @S_YEAR + @S_MONTH +@S_DAY +SUBSTRING('000000000000',1,@I_OUTO_NUM_LEN) AS OUTOID
        END
        RETURN
 
 
 

 

ABAP中使用函数Number_Get_Next产生流水号

1. 系统中设定流水号 使用T-CodeSNRO来创建一个流水号标识对象,输入Object Name 'ZQMNUM',然后单击创建。如下图所示: 然后输入Shorttext, Long text,...
  • champaignwolf
  • champaignwolf
  • 2015年09月28日 13:59
  • 1962

在项目中,如何根据当前的流水号,生成下一个流水号!

在项目中,如何根据当前的流水号,生成下一个流水号! DataType.java package cn.itcast.crm.util; import org.apache.commons.l...
  • u013456370
  • u013456370
  • 2015年02月03日 15:08
  • 1220

Oracle数据库大并发下保证订单流水号的唯一性

订单流水号一般都以日期+类别+编码,如201702190001,以方便数据归类统计。并发性高的情况下,select max(id) from order 并不能保证流水号的唯一性,select的同时有...
  • lishengko
  • lishengko
  • 2017年02月19日 17:07
  • 1348

Sql 函数获取订单交易流水号

  • 2013年10月25日 22:32
  • 1KB
  • 下载

生成并发唯一性流水号的解决方案.doc

  • 2011年08月01日 10:15
  • 41KB
  • 下载

自定义函数完成单据流水号的设计

  • 2013年08月25日 19:54
  • 2KB
  • 下载

asp.net发送邮件,使用MD5加密解密,实现用户注册完成后发送流水号(账号)到对方邮箱,jeasyUI验证,combobox的使用完成 实例下载

  • 2014年08月08日 14:48
  • 1.95MB
  • 下载

数据库sqlservser的流水号.rar

  • 2010年05月28日 12:35
  • 946B
  • 下载

流水号的sql语句

  • 2012年01月10日 13:08
  • 455B
  • 下载

二维码生成和业务流水号生成demo

  • 2016年06月03日 16:48
  • 484KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:获取流水号
举报原因:
原因补充:

(最多只允许输入30个字)