SqlServer获取数据表字段自定义编号

56 篇文章 1 订阅
1 篇文章 0 订阅

存储过程如下所示:


/*******************************************
 * 获取表某字段的自定义编号
 *     调用方法:Exec p_GetCustomCode 'BAS_PriceArt','ArtCode','RSK',4,0,''
 *     返回结果:RSK0001
*******************************************/

CREATE PROC [dbo].[p_GetCustomCode]
      @TableName VARCHAR(50),    --表名称
	  @ColumnName VARCHAR(20),   --列名称
	  @Where VARCHAR(100),       --查询条件,不需要加WHERE关键字,如:Code='100'
      @Prefix VARCHAR(20),       --前缀
      @NoLength INT=4,           --数字长度
      @IsEqualPrefix INT,        --是否匹配为某前缀的数据
      @Code VARCHAR(50) OUTPUT   --返回编号
AS
BEGIN

	DECLARE
      @Max Int,
      @ZeroStr Varchar(50);

      Set @Code='';
      Set @Max=0;
      Set @ZeroStr='';

      --设置数字部分的字符串
      IF(@NoLength>20)
           Begin
                 Set @NoLength=20;
           End
      ELSE IF(@NoLength<1)
           BEGIN
                 Set @NoLength=4;
           END

      DECLARE @i INT;
      SET @i=1;
      WHILE @i<=@NoLength
           BEGIN
                 SET @ZeroStr=@ZeroStr+'0';
                 SET @i=@i+1;
           END 


	  --动态Sql查询语句:查询某表某列的最大值(不包含字段前缀)
      DECLARE @Sql NVARCHAR(300);
      SET @Sql=' Select @Max=Max(Cast(Right('+@ColumnName+','+CAST(@NoLength AS VARCHAR)+')As Int)) From '+@TableName;

	  IF(LEN(@Where)>0)
		BEGIN
			SET @Sql=@Sql+' WHERE '+@Where;
		END

      IF(@IsEqualPrefix=1)
           BEGIN
			  IF(LEN(@Where)>0)
				  BEGIN
					  SET @Sql=@Sql+' WHERE '+@Where+' AND Left('+@ColumnName+','+CAST(LEN(@Prefix) AS VARCHAR)+')='''+@Prefix+''' ;';
				  END
			  ELSE
                  BEGIN
					SET @Sql=@Sql+' WHERE Left('+@ColumnName+','+CAST(LEN(@Prefix) AS VARCHAR)+')='''+@Prefix+''' ;';
				  END
           END                  

      EXEC sp_executesql @Sql,N'@Max Int Output',@Max OUTPUT; 

      IF(ISNULL(@Max,0)>0)
           BEGIN
                 SELECT @Code=@Prefix+RIGHT(@ZeroStr+CAST(@Max + 1 AS VARCHAR),@NoLength);
           END
      ELSE
           BEGIN
                 SELECT @Code = @Prefix +LEFT(@ZeroStr,@NoLength-1)+'1';
           END

      PRINT @Code;
	  SELECT @Code;
END


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值