问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁帮我解释下这个存储过程啊

发布网友 发布时间:2022-04-15 00:16

我来回答

2个回答

热心网友 时间:2022-04-15 01:45

ALTER proc [dbo].[up_addDayTable]
@tname varchar(100), @ttype int --传入值,两个@tname和@ttype
as
declare @sqlText varchar(5000); --声明变量
declare @i int; --声明变量
declare @count int; --声明变量
set @i = 1; --赋初始值

--创建临时表
create table #tmpTable (tid int identity(1,1) not null primary key,--主键,自增1
tname varchar(20) null);

--将ftype=传入值@ttype的数据插入刚刚临时表
insert into #tmpTable (tname)select Ffield from Sys_Factor where Ftype = @ttype ;

--计数,有多少条
select @count = count(1) from #tmptable;

--动态sql,创建一个表名为传入值@tname的表,包含一个自增1的主键和一个日期时间型字段
set @sqlText = ' create table '+@tname+'(Hid bigint primary key identity(1,1) not null,Htime datetime null ';

--循环,将临时表#tmptable的tname取出来
while (@i <= @count)
begin --循环开始
declare @tmpstr varchar(20); --声明变量
select @tmpstr= tname from #tmptable where tid = @i; --赋值,将临时表中tid=1的tname赋给@tmpstr

--下面是对刚刚的动态sql增加字段,增加@tmpstr+_min/_avg/_max的字段,估计分别为最小值、平均值、最大值
set @sqlText = @sqlText + ','+@tmpstr+'_min float null,'+@tmpstr+'_avg float null,'+@tmpstr+'_max float null,'+@tmpstr+'_sum float null' ;
set @i=@i+1; --变量@i+1
end --循环结束

delete from #tmpTable; --删除临时表数据
drop table #tmpTable; --删除临时表

set @sqlText =@sqlText+');' ;--对改动态sql赋值
exec (@sqlText); --执行动态sql,就是一个创建表的语句

--总结,本存储过程传入一个@tname,和@ttype的参数,创建一个表名为@tname的数据表,
--其中字段有Hid(自增1的主键)、Htime(时间)、然后就是
--select Ffield from Sys_Factor where Ftype = @ttype的值分别创建加了_min,_avg,_max后缀的字段

热心网友 时间:2022-04-15 03:03

从表Sys_Factor中取出Ftype = @ttype的记录中的Ffield字段,并用取到的字段值作为列名创建一张新表@tname追问哦,可是能不能详细点呢?,因为我对存储过程不是很了解

追答--修改存储过程up_addDayTable
ALTER proc [dbo].[up_addDayTable]
--传入2个参数
@tname varchar(100), @ttype int
as
--定义变量
declare @sqlText varchar(5000);
declare @i int;
declare @count int;
--给变量@i赋值
set @i = 1;
--创建一个有2字段的临时表,主键为自增类型
create table #tmpTable (tid int identity(1,1) not null primary key , tname varchar(20) null);
--从表Sys_Factor中搜出Ftype为@ttype的记录,将Ffield字段的值插入临时表#tmpTable
insert into #tmpTable (tname)select Ffield from Sys_Factor where Ftype = @ttype ;
--获取临时表#tmpTable中的记录条数
select @count = count(1) from #tmptable;
--给变量@sqlText赋值,赋值语句为创建一个名为@tname的表,主键为HID,自增,
--然后依次读出临时表#tmpTable中的tname字段的值赋给变量@tmpstr,并以变量@tmpstr_min,@tmpstr_avg,@tmpstr_max,@tmpstr_sum作为新表@tname的字段名
set @sqlText = ' create table '+@tname+'(Hid bigint primary key identity(1,1) not null,Htime datetime null ';
--从这里开始循环
while (@i <= @count)
begin
--定义变量
declare @tmpstr varchar(20);
--取出tname的值赋给@tmpstr
select @tmpstr= tname from #tmptable where tid = @i;
--构建表@tname的字段
set @sqlText = @sqlText + ','+@tmpstr+'_min float null,'+@tmpstr+'_avg float null,'+@tmpstr+'_max float null,'+@tmpstr+'_sum float null' ;

set @i=@i+1;
--这里结束
end

--删除临时表#tmpTable
delete from #tmpTable;
drop table #tmpTable;
set @sqlText =@sqlText+');' ;
--执行建表语句
exec (@sqlText);

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivo y3t手机能拨打和接听电话,不能收发短信 vivoy3t手机突然接收不到短信 vivoy3短信消息怎么提醒 无奈什么意思是什么 怎样让炒出的丝瓜不发黑? 钟表是以什么计量时间 钟表以( )、()、( )计量时间。 钟表以( )、()、( )单位计量时间 紫荆花开放时间 《青春 须臾成殇》渭伊的txt全集下载地址 没有了,微信钱包里的钱怎么找回? 没有了,微信钱包里的钱怎么找回来? 没有了,微信钱包里的钱怎么找回来? 女人阴气重怎样增阳气 女人阴气重的人有哪些特征 怎么样才能让女人补阳气 阴气重的女人是什么样的,常见吗? 女人面色红润有光润是阳气重还是阴气重 女人阳气重是怎么回事 。 什么样的人阳气重?什么样的人阴气重? 有多少父母在陪娃“读绘本”的时间里,悄悄地打开了故事机,你中招了吗? 如果形容一个女生的阳刚之气特别重,是什么意思,这样的女生以后找对象好找不,多数会找什么样的对象 女生阳气重 有喜欢给孩子读绘本的妈妈吗 女生阳气太重的表现 苹果手机镜片里面有杂物怎么清理啊,拆下来清理又心疼 谁能说说啊 信用卡还款App哪家做的比较好 手机的后摄影机镜片怎么自己拆了换 iphone6镜头套怎么拆下来 iPhone6镜头保护圈拆不下来怎么办 节目中公然耍酒疯,强吻谢娜侮辱金星,44岁的乐嘉如今怎么样了? 我是演说家崔万志说爱情故事 大家觉得演说家乐嘉老师人怎么样? 剁椒还可以做什么菜? 如何把excel数据导入cad CAD 表格中 除号怎么表示 怎样才可以发烧 CAD中的特殊符号怎么打? 怎样才能发烧? 在CAD2007中,怎么打不出特殊符号 怎么才可以发烧 求问,CAD2007这个符号怎么打出来?如图 求问,CAD2007这个符号怎么打出来?如图 除号在CAD中怎么打 预备党员第三季度思想汇报怎么写 手上鸡眼是怎么形成的,如此想想 男朋友在部队,快要过生日了,送什么礼物好呢 送当兵的男朋友什么礼物? 给当兵的男朋友送什么礼物? 男朋友去当兵了,想送点礼物给他送什么好呢?什么礼物可以带进部队