--exec yanqipaifang '2009','1',0
CREATE PROCEDURE yanqipaifang@Y varchar(4),--指定年
@M varchar(2), --指定月
@flag int ,--查询方式 1 指定年,0指定月
@caijishijian varchar
AS
--定义存储过程内部变量
declare
@a varchar(100),
@tmp varchar(100),
@j int,
@i int,
@b varchar(100)
,@sql nvarchar(4000) --这里要定义为nvarchar类型
,@东桥原煤量1 real
,@老厂石灰石量1 real
,@新厂石灰石量1 real
,@东桥原煤量累计1 real
,@老厂石灰石量累计1 real
,@新厂石灰石量累计1 real
,@老厂脱硫电量消耗1 real
,@新厂脱硫电量消耗1 real
,@新厂煤量采集1 real
,@新厂煤量累计1 real
,@riqi datetime
,@东桥原煤量 real
,@老厂石灰石量 real
,@新厂石灰石量 real
,@东桥原煤量累计 real
,@老厂石灰石量累计 real
,@新厂石灰石量累计 real
,@老厂脱硫电量消耗 real
,@新厂脱硫电量消耗 real
,@新厂煤量采集 real
,@新厂煤量累计 real
--给定义的变量赋初值0
set @东桥原煤量=0
set @老厂石灰石量=0
set @新厂石灰石量=0
set @东桥原煤量累计=0
set @老厂石灰石量累计=0
set @新厂石灰石量累计=0
set @老厂脱硫电量消耗=0
set @新厂脱硫电量消耗=0
set @新厂煤量采集=0
set @新厂煤量累计=0
--给定义的内部变量赋初值0
set @东桥原煤量1=0
set @老厂石灰石量1=0
set @新厂石灰石量1=0
set @东桥原煤量累计1=0
set @老厂石灰石量累计1=0
set @新厂石灰石量累计1=0
set @老厂脱硫电量消耗1=0
set @新厂脱硫电量消耗1=0
set @新厂煤量采集1=0
set @新厂煤量累计1=0
if @flag=1
begin
set @j=12
while @j>0
begin
select @tmp =@Y+'-'+(str(@j))+'-01'
--print @riqi
select @riqi=dateadd(dd,-day(@tmp),dateadd(m,1,@tmp)) set @i=day(@riqi) --循环取出需要的各值的和
while @i>0
begin
set @a='a'+convert(char(8),@riqi-@i+1,112) --得到时间表名
-- print @a
set @b=convert(char(8),@riqi-@i+1,112)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['+@a+']') and OBJECTPROPERTY(id, N'IsUserTable') = 1 )
begin
--print @a
--查询数据库中的参数,内部变量=sum(字段名)
set @sql='select @东桥原煤量1=sum(东桥原煤量),@老厂石灰石量1=sum(老厂石灰石量),@新厂石灰石量1=sum(新厂石灰石量),@东桥原煤量累计1=sum(东桥原煤量累计),@老厂石灰石量累计1=sum(老厂石灰石量累计),@新厂石灰石量累计1=sum(新厂石灰石量累计),@老厂脱硫电量消耗1=sum(老厂脱硫电量消耗),@新厂脱硫电量消耗1=sum(新厂脱硫电量消耗),@新厂煤量采集1=sum(新厂煤量采集),@新厂煤量累计1=sum(新厂煤量累计) from '+@a+' where 采集时间=(select max(采集时间) from '+@a+')' --动态得到表
--print @sql
exec sp_executesql @sql,N'@东桥原煤量1 real output,@老厂石灰石量1 real output,@新厂石灰石量1 real output,@东桥原煤量累计1 real output ,@老厂石灰石量累计1 real output,@新厂石灰石量累计1 real output,@老厂脱硫电量消耗1 real output,@新厂脱硫电量消耗1 real output,@新厂煤量采集1 real output,@新厂煤量累计1 real output',
@东桥原煤量1 output,@老厂石灰石量1 output,@新厂石灰石量1 output,@东桥原煤量累计1 output ,@老厂石灰石量累计1 output,@新厂石灰石量累计1 output,@老厂脱硫电量消耗1 output,@新厂脱硫电量消耗1 output,@新厂煤量采集1 output,@新厂煤量累计1 output --输出内部变量-
set @东桥原煤量=isnull(@东桥原煤量1,0)+@东桥原煤量 --如果@sum1无初始值的话,得不到正确结果.所以要判断一下,@sum1是否为null,因为null与任何值的计算结果均为null.
set @老厂石灰石量=isnull(@老厂石灰石量1,0)+@老厂石灰石量 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @新厂石灰石量=isnull(@新厂石灰石量1,0)+@新厂石灰石量
set @东桥原煤量累计=isnull(@东桥原煤量累计1,0)+@东桥原煤量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @老厂石灰石量累计=isnull(@老厂石灰石量累计1,0)+@老厂石灰石量累计
set @新厂石灰石量累计=isnull(@新厂石灰石量累计1,0)+@新厂石灰石量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @老厂脱硫电量消耗=isnull(@老厂脱硫电量消耗1,0)+@老厂脱硫电量消耗
set @新厂脱硫电量消耗=isnull(@新厂脱硫电量消耗1,0)+@新厂脱硫电量消耗 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @新厂煤量采集=isnull(@新厂煤量采集1,0)+@新厂煤量采集
set @新厂煤量累计=isnull(@新厂煤量累计1,0)+@新厂煤量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @i=@i-1
end
else
set @i=@i-1
end insert into newajk values(@东桥原煤量,@老厂石灰石量,@新厂石灰石量,@东桥原煤量累计,@老厂石灰石量累计,@新厂石灰石量累计,@老厂脱硫电量消耗,@新厂脱硫电量消耗,@新厂煤量采集,@新厂煤量累计,@caijishijian)
-- print @j
set @j=@j-1
end
insert into newajk select sum(东桥原煤量),sum(老厂石灰石量),sum(新厂石灰石量),sum(东桥原煤量累计),sum(老厂石灰石量累计),sum(新厂石灰石量累计),sum(老厂脱硫电量消耗),sum(新厂脱硫电量消耗),sum(新厂煤量采集),sum(新厂煤量累计),@caijishijian from #tmp
end
else
begin
select @tmp =@Y+'-'+(str(@M))+'-01'
--print @riqi
select @riqi=dateadd(dd,-day(@tmp),dateadd(m,1,@tmp))
--print @riqi
set @i=day(@riqi) --循环取出需要的各值的和
--exec shihuishi1 '2009','1',1
while @i>0
begin
--print @i set @a='a'+convert(char(8),@riqi-@i+1,112) --得到时间表名
set @b=convert(char(8),@riqi-@i+1,112)
--print day(@b)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['+@a+']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
--print @a
--查询数据库中的参数,内部变量=sum(字段名)
set @sql='select @东桥原煤量1=sum(东桥原煤量),@老厂石灰石量1=sum(老厂石灰石量),@新厂石灰石量1=sum(新厂石灰石量),@东桥原煤量累计1=sum(东桥原煤量累计),@老厂石灰石量累计1=sum(老厂石灰石量累计),@新厂石灰石量累计1=sum(新厂石灰石量累计),@老厂脱硫电量消耗1=sum(老厂脱硫电量消耗),@新厂脱硫电量消耗1=sum(新厂脱硫电量消耗),@新厂煤量采集1=sum(新厂煤量采集),@新厂煤量累计1=sum(新厂煤量累计) from '+@a+' where 采集时间=(select max(采集时间) from '+@a+')' --动态得到表
--print @sql
exec sp_executesql @sql,N'@东桥原煤量1 real output,@老厂石灰石量1 real output,@新厂石灰石量1 real output,@东桥原煤量累计1 real output ,@老厂石灰石量累计1 real output,@新厂石灰石量累计1 real output,@老厂脱硫电量消耗1 real output,@新厂脱硫电量消耗1 real output,@新厂煤量采集1 real output,@新厂煤量累计1 real output',
-- @东桥原煤量1 output,@老厂石灰石量1 output,@新厂石灰石量1 output,@东桥原煤量累计1 output,@老厂石灰石量累计1 output --输出内部变
@东桥原煤量1 output,@老厂石灰石量1 output,@新厂石灰石量1 output,@东桥原煤量累计1 output ,@老厂石灰石量累计1 output,@新厂石灰石量累计1 output,@老厂脱硫电量消耗1 output,@新厂脱硫电量消耗1 output,@新厂煤量采集1 output,@新厂煤量累计1 output --输出内部变量-
set @东桥原煤量=isnull(@东桥原煤量1,0)+@东桥原煤量 --如果@sum1无初始值的话,得不到正确结果.所以要判断一下,@sum1是否为null,因为null与任何值的计算结果均为null.
set @老厂石灰石量=isnull(@老厂石灰石量1,0)+@老厂石灰石量 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @新厂石灰石量=isnull(@新厂石灰石量1,0)+@新厂石灰石量
set @老厂石灰石量累计=isnull(@老厂石灰石量累计1,0)+@老厂石灰石量累计
set @东桥原煤量累计=isnull(@东桥原煤量累计1,0)+@东桥原煤量累计 set @新厂煤量累计=isnull(@新厂煤量累计1,0)+@新厂煤量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @老厂脱硫电量消耗=isnull(@老厂脱硫电量消耗1,0)+@老厂脱硫电量消耗
set @新厂脱硫电量消耗=isnull(@新厂脱硫电量消耗1,0)+@新厂脱硫电量消耗 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @新厂煤量采集=isnull(@新厂煤量采集1,0)+@新厂煤量采集
set @新厂煤量累计=isnull(@新厂煤量累计1,0)+@新厂煤量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
insert into newajk values(@东桥原煤量1,@老厂石灰石量1,@新厂石灰石量1,@东桥原煤量累计1,@老厂石灰石量累计1,@新厂石灰石量累计1,@老厂脱硫电量消耗1,@新厂脱硫电量消耗1,@新厂煤量采集1,@新厂煤量累计1,@caijishijian)
set @i=@i-1
end
else
set @i=@i-1
end
insert into newajk values(0,@老厂石灰石量,0,@东桥原煤量累计,0,@新厂煤量累计,0,0,0,@新厂煤量累计,@caijishijian)
begin
select @i=count(*)-1 from newajk
end
end
GO我这个存储过程 需要改写成 自动插入到表中 但是不能有时间重复,采集时间字段显示 当前年月 每天执行一次这个存储过程,然后有重复数据就update 不知道怎么改 谢谢大家帮忙看看
表结构是:
create table newajk(东桥原煤量 real,老厂石灰石量 real,新厂石灰石量 real,东桥原煤量累计 real,老厂石灰石量累计 real, 新厂石灰石量累计 real, 老厂脱硫电量消耗 real,新厂脱硫电量消耗 real,新厂煤量采集 real,新厂煤量累计 real,采集时间 caijishijian varchar)
CREATE PROCEDURE yanqipaifang@Y varchar(4),--指定年
@M varchar(2), --指定月
@flag int ,--查询方式 1 指定年,0指定月
@caijishijian varchar
AS
--定义存储过程内部变量
declare
@a varchar(100),
@tmp varchar(100),
@j int,
@i int,
@b varchar(100)
,@sql nvarchar(4000) --这里要定义为nvarchar类型
,@东桥原煤量1 real
,@老厂石灰石量1 real
,@新厂石灰石量1 real
,@东桥原煤量累计1 real
,@老厂石灰石量累计1 real
,@新厂石灰石量累计1 real
,@老厂脱硫电量消耗1 real
,@新厂脱硫电量消耗1 real
,@新厂煤量采集1 real
,@新厂煤量累计1 real
,@riqi datetime
,@东桥原煤量 real
,@老厂石灰石量 real
,@新厂石灰石量 real
,@东桥原煤量累计 real
,@老厂石灰石量累计 real
,@新厂石灰石量累计 real
,@老厂脱硫电量消耗 real
,@新厂脱硫电量消耗 real
,@新厂煤量采集 real
,@新厂煤量累计 real
--给定义的变量赋初值0
set @东桥原煤量=0
set @老厂石灰石量=0
set @新厂石灰石量=0
set @东桥原煤量累计=0
set @老厂石灰石量累计=0
set @新厂石灰石量累计=0
set @老厂脱硫电量消耗=0
set @新厂脱硫电量消耗=0
set @新厂煤量采集=0
set @新厂煤量累计=0
--给定义的内部变量赋初值0
set @东桥原煤量1=0
set @老厂石灰石量1=0
set @新厂石灰石量1=0
set @东桥原煤量累计1=0
set @老厂石灰石量累计1=0
set @新厂石灰石量累计1=0
set @老厂脱硫电量消耗1=0
set @新厂脱硫电量消耗1=0
set @新厂煤量采集1=0
set @新厂煤量累计1=0
if @flag=1
begin
set @j=12
while @j>0
begin
select @tmp =@Y+'-'+(str(@j))+'-01'
--print @riqi
select @riqi=dateadd(dd,-day(@tmp),dateadd(m,1,@tmp)) set @i=day(@riqi) --循环取出需要的各值的和
while @i>0
begin
set @a='a'+convert(char(8),@riqi-@i+1,112) --得到时间表名
-- print @a
set @b=convert(char(8),@riqi-@i+1,112)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['+@a+']') and OBJECTPROPERTY(id, N'IsUserTable') = 1 )
begin
--print @a
--查询数据库中的参数,内部变量=sum(字段名)
set @sql='select @东桥原煤量1=sum(东桥原煤量),@老厂石灰石量1=sum(老厂石灰石量),@新厂石灰石量1=sum(新厂石灰石量),@东桥原煤量累计1=sum(东桥原煤量累计),@老厂石灰石量累计1=sum(老厂石灰石量累计),@新厂石灰石量累计1=sum(新厂石灰石量累计),@老厂脱硫电量消耗1=sum(老厂脱硫电量消耗),@新厂脱硫电量消耗1=sum(新厂脱硫电量消耗),@新厂煤量采集1=sum(新厂煤量采集),@新厂煤量累计1=sum(新厂煤量累计) from '+@a+' where 采集时间=(select max(采集时间) from '+@a+')' --动态得到表
--print @sql
exec sp_executesql @sql,N'@东桥原煤量1 real output,@老厂石灰石量1 real output,@新厂石灰石量1 real output,@东桥原煤量累计1 real output ,@老厂石灰石量累计1 real output,@新厂石灰石量累计1 real output,@老厂脱硫电量消耗1 real output,@新厂脱硫电量消耗1 real output,@新厂煤量采集1 real output,@新厂煤量累计1 real output',
@东桥原煤量1 output,@老厂石灰石量1 output,@新厂石灰石量1 output,@东桥原煤量累计1 output ,@老厂石灰石量累计1 output,@新厂石灰石量累计1 output,@老厂脱硫电量消耗1 output,@新厂脱硫电量消耗1 output,@新厂煤量采集1 output,@新厂煤量累计1 output --输出内部变量-
set @东桥原煤量=isnull(@东桥原煤量1,0)+@东桥原煤量 --如果@sum1无初始值的话,得不到正确结果.所以要判断一下,@sum1是否为null,因为null与任何值的计算结果均为null.
set @老厂石灰石量=isnull(@老厂石灰石量1,0)+@老厂石灰石量 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @新厂石灰石量=isnull(@新厂石灰石量1,0)+@新厂石灰石量
set @东桥原煤量累计=isnull(@东桥原煤量累计1,0)+@东桥原煤量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @老厂石灰石量累计=isnull(@老厂石灰石量累计1,0)+@老厂石灰石量累计
set @新厂石灰石量累计=isnull(@新厂石灰石量累计1,0)+@新厂石灰石量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @老厂脱硫电量消耗=isnull(@老厂脱硫电量消耗1,0)+@老厂脱硫电量消耗
set @新厂脱硫电量消耗=isnull(@新厂脱硫电量消耗1,0)+@新厂脱硫电量消耗 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @新厂煤量采集=isnull(@新厂煤量采集1,0)+@新厂煤量采集
set @新厂煤量累计=isnull(@新厂煤量累计1,0)+@新厂煤量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @i=@i-1
end
else
set @i=@i-1
end insert into newajk values(@东桥原煤量,@老厂石灰石量,@新厂石灰石量,@东桥原煤量累计,@老厂石灰石量累计,@新厂石灰石量累计,@老厂脱硫电量消耗,@新厂脱硫电量消耗,@新厂煤量采集,@新厂煤量累计,@caijishijian)
-- print @j
set @j=@j-1
end
insert into newajk select sum(东桥原煤量),sum(老厂石灰石量),sum(新厂石灰石量),sum(东桥原煤量累计),sum(老厂石灰石量累计),sum(新厂石灰石量累计),sum(老厂脱硫电量消耗),sum(新厂脱硫电量消耗),sum(新厂煤量采集),sum(新厂煤量累计),@caijishijian from #tmp
end
else
begin
select @tmp =@Y+'-'+(str(@M))+'-01'
--print @riqi
select @riqi=dateadd(dd,-day(@tmp),dateadd(m,1,@tmp))
--print @riqi
set @i=day(@riqi) --循环取出需要的各值的和
--exec shihuishi1 '2009','1',1
while @i>0
begin
--print @i set @a='a'+convert(char(8),@riqi-@i+1,112) --得到时间表名
set @b=convert(char(8),@riqi-@i+1,112)
--print day(@b)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['+@a+']') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
--print @a
--查询数据库中的参数,内部变量=sum(字段名)
set @sql='select @东桥原煤量1=sum(东桥原煤量),@老厂石灰石量1=sum(老厂石灰石量),@新厂石灰石量1=sum(新厂石灰石量),@东桥原煤量累计1=sum(东桥原煤量累计),@老厂石灰石量累计1=sum(老厂石灰石量累计),@新厂石灰石量累计1=sum(新厂石灰石量累计),@老厂脱硫电量消耗1=sum(老厂脱硫电量消耗),@新厂脱硫电量消耗1=sum(新厂脱硫电量消耗),@新厂煤量采集1=sum(新厂煤量采集),@新厂煤量累计1=sum(新厂煤量累计) from '+@a+' where 采集时间=(select max(采集时间) from '+@a+')' --动态得到表
--print @sql
exec sp_executesql @sql,N'@东桥原煤量1 real output,@老厂石灰石量1 real output,@新厂石灰石量1 real output,@东桥原煤量累计1 real output ,@老厂石灰石量累计1 real output,@新厂石灰石量累计1 real output,@老厂脱硫电量消耗1 real output,@新厂脱硫电量消耗1 real output,@新厂煤量采集1 real output,@新厂煤量累计1 real output',
-- @东桥原煤量1 output,@老厂石灰石量1 output,@新厂石灰石量1 output,@东桥原煤量累计1 output,@老厂石灰石量累计1 output --输出内部变
@东桥原煤量1 output,@老厂石灰石量1 output,@新厂石灰石量1 output,@东桥原煤量累计1 output ,@老厂石灰石量累计1 output,@新厂石灰石量累计1 output,@老厂脱硫电量消耗1 output,@新厂脱硫电量消耗1 output,@新厂煤量采集1 output,@新厂煤量累计1 output --输出内部变量-
set @东桥原煤量=isnull(@东桥原煤量1,0)+@东桥原煤量 --如果@sum1无初始值的话,得不到正确结果.所以要判断一下,@sum1是否为null,因为null与任何值的计算结果均为null.
set @老厂石灰石量=isnull(@老厂石灰石量1,0)+@老厂石灰石量 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @新厂石灰石量=isnull(@新厂石灰石量1,0)+@新厂石灰石量
set @老厂石灰石量累计=isnull(@老厂石灰石量累计1,0)+@老厂石灰石量累计
set @东桥原煤量累计=isnull(@东桥原煤量累计1,0)+@东桥原煤量累计 set @新厂煤量累计=isnull(@新厂煤量累计1,0)+@新厂煤量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @老厂脱硫电量消耗=isnull(@老厂脱硫电量消耗1,0)+@老厂脱硫电量消耗
set @新厂脱硫电量消耗=isnull(@新厂脱硫电量消耗1,0)+@新厂脱硫电量消耗 --输出参数=isnull(@对应的内部变量,0)+@输出参数
set @新厂煤量采集=isnull(@新厂煤量采集1,0)+@新厂煤量采集
set @新厂煤量累计=isnull(@新厂煤量累计1,0)+@新厂煤量累计 --输出参数=isnull(@对应的内部变量,0)+@输出参数
insert into newajk values(@东桥原煤量1,@老厂石灰石量1,@新厂石灰石量1,@东桥原煤量累计1,@老厂石灰石量累计1,@新厂石灰石量累计1,@老厂脱硫电量消耗1,@新厂脱硫电量消耗1,@新厂煤量采集1,@新厂煤量累计1,@caijishijian)
set @i=@i-1
end
else
set @i=@i-1
end
insert into newajk values(0,@老厂石灰石量,0,@东桥原煤量累计,0,@新厂煤量累计,0,0,0,@新厂煤量累计,@caijishijian)
begin
select @i=count(*)-1 from newajk
end
end
GO我这个存储过程 需要改写成 自动插入到表中 但是不能有时间重复,采集时间字段显示 当前年月 每天执行一次这个存储过程,然后有重复数据就update 不知道怎么改 谢谢大家帮忙看看
表结构是:
create table newajk(东桥原煤量 real,老厂石灰石量 real,新厂石灰石量 real,东桥原煤量累计 real,老厂石灰石量累计 real, 新厂石灰石量累计 real, 老厂脱硫电量消耗 real,新厂脱硫电量消耗 real,新厂煤量采集 real,新厂煤量累计 real,采集时间 caijishijian varchar)
--采集时间获取当前时间可以set @caijishijian = convert(varchar(19),getdate(),120)
@Y --指定年的
@M --指定月的--可以按当前的时间获取set @caijishijian = @Y+'-'+@M+'-'+datepart(dd,getdate())+' '
+datepart(hh,getdate())+':'
+datepart(mi,getdate())+':'
+datepart(ss,getdate())
CREATE PROCEDURE yanqipaifang@Y varchar(4),--指定年
@M varchar(2), --指定月
@flag int ,--查询方式 1 指定年,0指定月
@caijishijian varchar --指定宽度 varchar(20)
AS
然后其他字段都是这个月的表里数据的月累计 还有就是 这个月累计的存储过程我想每天执行一次,这里面就存在一个 update的问题 而不能没执行一次就插入一次 那样就乱了!!请大家帮忙修改一下!!谢谢了!