生成规则编号

   生成的编号:例如:jx2009020001 共12位,由“固定开头+年月+0001”组成。回顾了一下写的内容,固定开头是有限制的,必须是2位,整体编号是12位。
一、建立种子表:

--DROP TABLE SST_KEYNO
IF NOT EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[DBO].[SST_KEYNO]') AND OBJECTPROPERTY(ID, N'ISUSERTABLE') = 1)

BEGIN

  CREATE TABLE [dbo].[SST_KEYNO] (
 [TABLE] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
 [NOTE] [varchar] (12) COLLATE Chinese_PRC_CI_AS NOT NULL ,
 [DATE] [datetime] NOT NULL ,
 [VALUE] [int] NULL
  ) ON [PRIMARY]


  ALTER TABLE [dbo].[SST_KEYNO] WITH NOCHECK ADD
 CONSTRAINT [PK_SST_KEYNO] PRIMARY KEY  CLUSTERED
 (
  [TABLE],
  [NOTE],
  [DATE]
 )  ON [PRIMARY]

END

 

二、存储过程实现生成规则编号:

 

IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME = 'GET_MAX_KEYNO' AND TYPE ='P')
DROP PROCEDURE GET_MAX_KEYNO
GO


CREATE  PROCEDURE GET_MAX_KEYNO
(
@TABLE VARCHAR(30),
@NOTE VARCHAR(12),
@KEY_NO VARCHAR(12) OUTPUT
)
--根据传入的"表名/种子"得到最大序号
AS
BEGIN
   DECLARE @MAX_KEY_NO VARCHAR(12)
   DECLARE @VALUE VARCHAR(20)
   DECLARE @VALUE_INT INT

   DECLARE @DATE_PART VARCHAR(8) --如:090501
   DECLARE @DATE_TODAY DATETIME
   SET @DATE_PART = SUBSTRING(convert(varchar(10),getdate(), 112),3,8)
   SET @DATE_TODAY = convert(varchar(10),getdate(),120)
  

   SET @MAX_KEY_NO = @NOTE + @DATE_PART
   
   DECLARE @NUM INT
   SET @NUM = (SELECT COUNT(*) FROM SST_KEYNO WHERE [TABLE]=@TABLE AND NOTE=@NOTE AND [DATE]= @DATE_TODAY)
    
   --1、在表中插入数据value = 2,返回 value = 1拼成的串   
   IF (@NUM = 0)
   BEGIN

     SET @MAX_KEY_NO = @MAX_KEY_NO + REPLACE(SPACE(11-LEN(@MAX_KEY_NO)),' ','0')+'1'

     INSERT INTO SST_KEYNO ([TABLE],[NOTE],[DATE],[VALUE])
       VALUES(@TABLE , @NOTE , @DATE_TODAY , 2)

   END

   --1、查询表中的value值,修改表中值
   IF(@NUM >= 1)
   BEGIN

     SET @VALUE_INT = (SELECT MAX(VALUE) FROM SST_KEYNO WHERE [TABLE]=@TABLE AND NOTE=@NOTE AND [DATE]= @DATE_TODAY)
     SET @VALUE = @VALUE_INT
    
     SET @MAX_KEY_NO = @MAX_KEY_NO + REPLACE(SPACE(12-LEN(@MAX_KEY_NO)-LEN(@VALUE)),' ','0') + @VALUE

     SET @VALUE_INT = @VALUE_INT + 1

     UPDATE SST_KEYNO
        SET VALUE = @VALUE_INT
      WHERE  [TABLE] = @TABLE AND NOTE = @NOTE AND [DATE]= @DATE_TODAY  
    
   END

   SET @KEY_NO = @MAX_KEY_NO
END

/*
DECLARE @KEYNO VARCHAR(12)


execute
   GET_MAX_KEYNO
@TABLE = '1111',
@NOTE = 'JX',
@KEY_NO = @KEYNO OUTPUT

SELECT @KEYNO
*/

转载于:https://www.cnblogs.com/chery/archive/2009/06/10/createNo.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值