/*
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_FIELDvarchar(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 = 'INSERTINTO #TEMPTBL SELECTMAX('+@S_OUTO_FIELD+') AS MAX_ID ' +' FROM '+@S_TABLE+''
SET @S_SQL = 'INSERTINTO #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产生流水号的两种方法 ABAP是SAP系统中的一种编程语言,用于开发SAP系统中的应用程序。在SAP系统中,流水号是非常重要的一种数据类型,用于标识唯一的记录。然而,SAP系统中并没有提供序列号的功能,但是我们...
- 如果有,则获取最新的流水号,并在此基础上递增1。 #### 三、注意事项 1. **安全性问题**: 直接将日期和SQL语句拼接可能会导致SQL注入攻击。建议使用参数化查询。 2. **异常处理**: 代码中虽然有异常捕获,但...
在事务处理中获取流水号尤其重要,因为这确保了在并发环境下也能保持流水号的唯一性和正确性。 在MySQL中,创建一个存储过程涉及到以下步骤: 1. **定义存储过程结构**:首先,我们需要定义存储过程的开始(`...
### SQL函数:获取订单交易流水号 #### 一、函数目的 此SQL函数的主要目的是为了生成一个唯一的订单交易流水号。该流水号由前缀(标志)、当前日期以及顺序号组成。 #### 二、函数定义与参数 该函数定义为 `NewNum...
在Java编程中,生成订单号...对于提供的`java订单号(时间加流水号).txt`文件,可能包含了具体的代码实现或使用示例,你可以查阅该文件以获取更详细的实现细节。在实际开发中,务必根据业务需求进行适当的调整和优化。
在IT行业中,数据库管理和开发是至关重要的环节,尤其是在企业级应用中,单据流水号的生成和管理是一项基础但关键的任务。单据流水号通常用于唯一标识每一条业务记录,确保数据的一致性和完整性。本篇文章将深入探讨...
用于实现个人免签约支付宝,原理是抓取个人账单,并将最新账单与用户提交的账单匹配,如成功返回给网站做交互
这个函数将获取当前日期,然后将其与流水号结合起来生成一个14位的流水号。 在表中应用函数 最后,我们需要在表中应用这个函数。我们可以使用以下SQL语句来创建表: ```sql CREATE TABLE table_BH ( sequenceID ...
在.NET开发中,生成流水号是一项常见的需求,例如在订单系统、会员系统或者任何需要唯一标识符的场景中。流水号通常需要具有唯一性、可读性和一定的排序性。本资源提供了一个C#语言实现流水号生成的案例,并且包含了...
mysql创建流水号,以前也一直不知道怎么写,最后我知道了,然后我保存了下来,用的纯sql语句,不需要后台java或者别的语言去生成。直接数据库的sql语句就行了。我设置的积分是1分。要是增加了,就是CSDN增加的,
非常好用的日期工具 流水号 日期格式化 获取当前时间戳 转换日期...
这篇文章主要介绍了sql 流水号获取代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的...获取流水号,通过存储过程: create Proc GetSeq ( @attr varchar(50), @year int, @month int, @Ret
如果已经创建了序列对象,可以直接在INSERT或UPDATE语句中使用`NEXT VALUE FOR`函数来获取下一个流水号。 6. **触发器**: 虽然不推荐,但可以通过创建触发器来自动更新流水号列。这种方式可能导致性能问题,因为...
通常,它会包含类定义、计数器的初始化、日期获取以及流水号生成的方法。 6. **扩展与优化**: - 若要增强系统的可扩展性,可以将流水号生成服务设计为微服务,通过API接口供其他系统调用。 - 考虑到业务需求可能...
- **C#源代码**:一个.NET类,包含生成流水号的函数,可能使用了`DateTime.Now`获取当前时间戳,并结合其他元素(如进程ID、线程ID或随机数)来生成流水号。 - **数据库脚本**:创建存储过程或者触发器,用于在...
2. 如果存在匹配的记录,说明之前已经生成过流水号,此时需要获取当前的最大流水号,将其加1,并确保其长度为`P_LENGTH`,然后更新回表中。 最后,函数返回最终生成的流水号,这个流水号是前缀和流水号的组合,或者...
例如,获取快递单号,可以将其转化为跳转至快递查询网站的链接。JavaScript可以方便地处理这种转换,使得数据更具交互性。 5. **复选框强制选择**: 在表单提交前,可能需要确保用户至少选中了一个复选框。通过...
java开发用于给上传文件附上ID,此ID号为日期+xxx,生成形如20131210001 第二天自动从20131211001开发不会重复。有问题可联系我。
当系统需要处理高并发时,比如每秒上千次的请求,这种方法可能会导致效率低下,因为所有并发进程都需要等待获取最新流水号,从而造成瓶颈。 在解决MS SQL Server 2000中流水号问题时,提出了针对整型(int)和字符型...