求实现一个略复杂的存储过程实例

橙色阳光 2015-07-29 03:43:50
create procedure CTwodimensionalcode
@gcdh INT,--取值1或者2
@rqdh VARCHAR(20),--取值3位数的字母
@sbh VARCHAR(20),--取值字母A-Z
@wlbh VARCHAR(20),--取值00001-99999 特别要求5位,没有5位前面补0补到5位
@lsh INT,--取值0000000-9999999 特别要求7位,没有7位前面补0补到7位 流水号
@jyh INT,--00-99 特别要求2位,没有俩位前面补0补到7位
@qz VARCHAR(200),--前缀网址http:www.baidu.com
@sl INT--数量 取值小于9999999

要求:
1.根据上面的参数依据一定的规则拼接然后插入Twodimensionalcode_A表;
规则如下:
伪代码如下:
@sl --数量
for(int i=0;i<=@sl;i++)
{
@lsh = @lsh + 1;//流水号累加每次+1 特别要求7位,没有7位前面补0补到7位 诸如现在流水号号为"6"补位"0000006"
插入表Twodimensionalcode_A(generateCode)VALUES(@gcdh+@rqdh+@sbh+@wlbh+@lsh+@jyh)
}
...全文
268 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pact_Alice 2015-07-29
  • 打赏
  • 举报
回复
--CREATE TABLE #T(Id INT, NAME VARCHAR(50)) DECLARE @gcdh INT,--取值1或者2 @rqdh VARCHAR(20),--取值3位数的字母 @sbh VARCHAR(20),--取值字母A-Z @wlbh VARCHAR(20),--取值00001-99999 特别要求5位,没有5位前面补0补到5位 @lsh INT,--取值0000000-9999999 特别要求7位,没有7位前面补0补到7位 流水号 @jyh INT,--00-99 特别要求2位,没有俩位前面补0补到7位 @qz VARCHAR(200),--前缀网址http:www.baidu.com @sl INT,--数量 取值小于9999999 @sql int SET @sl=5 SET @sql=1 SET @gcdh=2 --WHILE @sql<=@sl --BEGIN -- INSERT INTO #T(ID,Name) -- Select @sql,Char(Round(RAND()*25,0)+65)+Char(Round(RAND()*25,0)+65)+Char(Round(RAND()*25,0)+65) -- SET @sql=@sql+1 --end SET @sbh=('ABCDEFGHIJKLMNOPQRSTUVWXYZ') SET @rqdh=(Select Char(Round(RAND()*25,0)+65)+Char(Round(RAND()*25,0)+65)+Char(Round(RAND()*25,0)+65)) SELECT STUFF(number,2,3,Name) FROM ( SELECT cast(@gcdh AS VARCHAR(2))+@rqdh+@sbh+ RIGHT('0000'+ltrim(row_number()over(order by getdate())),8)+ --@wlbh RIGHT('0000000'+ltrim(row_number()over(order by getdate())-1),8)+ RIGHT('00'+ltrim(row_number()over(order by getdate())-1),2) AS Number, ROW_NUMBER()OVER(ORDER BY @sl)ID FROM MASTER..spt_values WHERE TYPE='p' and number BETWEEN 1 AND @sl )a JOIN #T b ON a.ID=b.ID
Pact_Alice 2015-07-29
  • 打赏
  • 举报
回复
DECLARE @gcdh INT,--取值1或者2 @rqdh VARCHAR(20),--取值3位数的字母 @sbh VARCHAR(20),--取值字母A-Z @wlbh VARCHAR(20),--取值00001-99999 特别要求5位,没有5位前面补0补到5位 @lsh INT,--取值0000000-9999999 特别要求7位,没有7位前面补0补到7位 流水号 @jyh INT,--00-99 特别要求2位,没有俩位前面补0补到7位 @qz VARCHAR(200),--前缀网址http:www.baidu.com @sl INT--数量 取值小于9999999 SET @gcdh=2 SET @sl=5 SET @sbh=('ABCDEFGHIJKLMNOPQRSTUVWXYZ') SET @rqdh=(Select Char(Round(RAND()*25,0)+65)+Char(Round(RAND()*25,0)+65)+Char(Round(RAND()*25,0)+65)) SELECT cast(@gcdh AS VARCHAR(2))+@rqdh+@sbh+ RIGHT('0000'+ltrim(row_number()over(order by getdate())),8)+ --@wlbh RIGHT('0000000'+ltrim(row_number()over(order by getdate())-1),8)+ RIGHT('00'+ltrim(row_number()over(order by getdate())-1),2) FROM MASTER..spt_values WHERE TYPE='p' and number BETWEEN 1 AND @sl
Cherise_huang 2015-07-29
  • 打赏
  • 举报
回复
抱歉,上面有一处需要用ltrim转换一下

--判断是否存在存储过程CTwodimensionalcode,若存在就删除
if OBJECT_ID('CTwodimensionalcode','p') is not null
begin
   drop proc CTwodimensionalcode
end
GO
--创建存储过程CTwodimensionalcode
create procedure CTwodimensionalcode
(
    @gcdh INT,--取值1或者2
	@rqdh VARCHAR(20),--取值3位数的字母
	@sbh  VARCHAR(20),--取值字母A-Z
	@wlbh VARCHAR(20),--取值00001-99999 特别要求5位,没有5位前面补0补到5位
	@lsh INT,--取值0000000-9999999 特别要求7位,没有7位前面补0补到7位  流水号
	@jyh INT,--00-99  特别要求2位,没有俩位前面补0补到7位
	@qz VARCHAR(200),--前缀网址http:www.baidu.com
	@sl INT--数量 取值小于9999999 	
)
AS
BEGIN 
	declare @i INT,
	        @add int
		SET @i=0
        while @i<=@sl AND @lsh < 9999999
        BEGIN 
        	IF(len(@lsh)<7)
        	BEGIN
        		SET @add=7-len(@lsh)
        		SET @lsh=Replicate('0',@add)+ltrim(@lsh)
        		SET @lsh = @lsh + 1
        	END
        	ELSE if(len(@lsh)=7)
        	BEGIN 
        		SET @lsh = @lsh + 1
            end
		--向Twodimensionalcode_A表中插入数据
		insert into Twodimensionalcode_A(generateCode)
		SELECT @gcdh+@rqdh+@sbh+@wlbh+@lsh+@jyh
		set @i+=1
        end
END
go
Cherise_huang 2015-07-29
  • 打赏
  • 举报
回复

--判断是否存在存储过程CTwodimensionalcode,若存在就删除
if OBJECT_ID('CTwodimensionalcode','p') is not null
begin
   drop proc CTwodimensionalcode
end
GO
--创建存储过程CTwodimensionalcode
create procedure CTwodimensionalcode
(
    @gcdh INT,--取值1或者2
	@rqdh VARCHAR(20),--取值3位数的字母
	@sbh  VARCHAR(20),--取值字母A-Z
	@wlbh VARCHAR(20),--取值00001-99999 特别要求5位,没有5位前面补0补到5位
	@lsh INT,--取值0000000-9999999 特别要求7位,没有7位前面补0补到7位  流水号
	@jyh INT,--00-99  特别要求2位,没有俩位前面补0补到7位
	@qz VARCHAR(200),--前缀网址http:www.baidu.com
	@sl INT--数量 取值小于9999999 	
)
AS
BEGIN 
	declare @i INT,
	        @add int
		SET @i=0
        while @i<=@sl AND @lsh < 9999999
        BEGIN 
        	IF(len(@lsh)<7)
        	BEGIN
        		SET @add=7-len(@lsh)
        		SET @lsh=Replicate('0',@add)+@lsh
        		SET @lsh = @lsh + 1
        	END
        	ELSE if(len(@lsh)=7)
        	BEGIN 
        		SET @lsh = @lsh + 1
            end
		--向Twodimensionalcode_A表中插入数据
		insert into Twodimensionalcode_A(generateCode)
		SELECT @gcdh+@rqdh+@sbh+@wlbh+@lsh+@jyh
		set @i+=1
        end
END
go

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧