谁帮我解释下这个存储过程啊
setANSI_NULLSONsetQUOTED_IDENTIFIERONgoALTERproc[dbo].[up_addDayTable]@tnamevarchar(1...
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[up_addDayTable] @tname varchar(100), @ttype int
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 , tname varchar(20) null);
insert into #tmpTable (tname)select Ffield from Sys_Factor where Ftype = @ttype ;
select @count = count(1) from #tmptable;
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);
select @tmpstr= tname from #tmptable where tid = @i;
set @sqlText = @sqlText + ','+@tmpstr+'_min float null,'+@tmpstr+'_avg float null,'+@tmpstr+'_max float null,'+@tmpstr+'_sum float null' ;
set @i=@i+1;
end
delete from #tmpTable;
drop table #tmpTable;
set @sqlText =@sqlText+');' ;
exec (@sqlText); 展开
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[up_addDayTable] @tname varchar(100), @ttype int
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 , tname varchar(20) null);
insert into #tmpTable (tname)select Ffield from Sys_Factor where Ftype = @ttype ;
select @count = count(1) from #tmptable;
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);
select @tmpstr= tname from #tmptable where tid = @i;
set @sqlText = @sqlText + ','+@tmpstr+'_min float null,'+@tmpstr+'_avg float null,'+@tmpstr+'_max float null,'+@tmpstr+'_sum float null' ;
set @i=@i+1;
end
delete from #tmpTable;
drop table #tmpTable;
set @sqlText =@sqlText+');' ;
exec (@sqlText); 展开
2个回答
展开全部
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后缀的字段
@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后缀的字段
展开全部
从表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);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询