CREATE PROCEDURE [compute]
@sum1 numeric(10,2) output
AS
declare @a varchar(100),@i int,@b varchar(100),@sql varchar(1000),@sum real
set @sum=0
set @i=day(getdate())
while @i>6
begin
set @a='d'+convert(char(8),getdate()-@i,112) --得到时间表名
set @b=convert(char(8),getdate()-@i,112)
set @sql='select sum(首站总供水流量) from '+@a+' where 采集时间='+@b+'0800 or 采集时间='+@b+'1200 or 采集时间 ='+@b+'2400' --动态得到表
exec sp_executesql @sql,N'@sum int output',@sum output
set @sum1=@sum1+@sum
set @i=@i-1
end
GO-----------------
declare @a numeric(10,2)
exec compute @a output
select @a
@sum1 numeric(10,2) output
AS
declare @a varchar(100),@i int,@b varchar(100),@sql varchar(1000),@sum real
set @sum=0
set @i=day(getdate())
while @i>6
begin
set @a='d'+convert(char(8),getdate()-@i,112) --得到时间表名
set @b=convert(char(8),getdate()-@i,112)
set @sql='select sum(首站总供水流量) from '+@a+' where 采集时间='+@b+'0800 or 采集时间='+@b+'1200 or 采集时间 ='+@b+'2400' --动态得到表
exec sp_executesql @sql,N'@sum int output',@sum output
set @sum1=@sum1+@sum
set @i=@i-1
end
GO-----------------
declare @a numeric(10,2)
exec compute @a output
select @a
@sum1 real output
AS
declare @a varchar(100),@i int,@b varchar(100),@sql varchar(1000),@sum real
set @sum=0
set @i=day(getdate())
while @i>6
begin
set @a='d'+convert(char(8),getdate()-@i,112) --得到时间表名
set @b=convert(char(8),getdate()-@i,112)
set @sql='select @sum=sum(首站总供水流量) from '+@a+' where 采集时间='+@b+'0800 or 采集时间='+@b+'1200 or 采集时间 ='+@b+'2400' --动态得到表
exec sp_executesql @sql,N'@sum int output',@sum output
set @sum1=@sum1+@sum
set @i=@i-1
end
return(@sum1)
服务器: 消息 214,级别 16,状态 2,过程 sp_executesql,行 13
过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。
@sum1 real output
AS
declare @a varchar(100),@i int,@b varchar(100)
,@sql nvarchar(4000) --这里要定义为nvarchar类型
,@sum real
set @sum=0
set @i=day(getdate())
while @i>6
begin
set @a='d'+convert(char(8),getdate()-@i,112) --得到时间表名
set @b=convert(char(8),getdate()-@i,112)
set @sql='select @sum=sum(首站总供水流量) from '+@a+' where 采集时间='+@b+'0800 or 采集时间='+@b+'1200 or 采集时间 ='+@b+'2400' --动态得到表
exec sp_executesql @sql,N'@sum int output',@sum output
set @sum1=isnull(@sum1,0)+@sum --不知道你是如何调用的,如果@sum1无初始值的话,得不到正确结果.所以要判断一下,@sum1是否为null,因为null与任何值的计算结果均为null.
set @i=@i-1
end
--return(@sum1) ---其实可以不要这句
go--调用
declare @re real
exec compute @re out
select 结果=@re
@sum1 real output
AS
declare @a varchar(100),@i int,@b varchar(100),@sql nvarchar(4000),@sum real
set @sum=0
set @i=day(getdate())
while @i>6
begin
set @a='d'+convert(char(8),getdate()-@i,112) --得到时间表名
set @b=convert(char(8),getdate()-@i,112)
set @sql=N'select @sum=sum(首站总供水流量) from '+@a+' where 采集时间='+@b+'0800 or 采集时间='+@b+'1200 or 采集时间 ='+@b+'2400' --动态得到表
exec sp_executesql @sql,N'@sum int output',@sum output
set @sum1=@sum1+@sum
set @i=@i-1
end
return(@sum1)
CREATE PROCEDURE [compute]
@sum1 real output,@sum3 real output
AS
declare @a varchar(100),@i int,@b varchar(100)
,@sql nvarchar(4000) --这里要定义为nvarchar类型
,@sum real
,@sum2 real
set @sum=0
set @sum1=0
set @sum2=0
set @sum3=0
set @i=day(getdate())
while @i>0
begin
set @a='d'+convert(char(8),getdate()-@i+1,112) --得到时间表名
set @b=convert(char(8),getdate()-@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
set @sql='select @sum=sum(首站总供水流量),@sum2=sum(首站总供压) from '+@a+' where 采集时间='+@b+'0800 or 采集时间='+@b+'1600 or 采集时间 ='+@b+'2400' --动态得到表
exec sp_executesql @sql,N'@sum int output',@sum output
set @sum1=isnull(@sum,0)+@sum1 --不知道你是如何调用的,如果@sum1无初始值的话,得不到正确结果.所以要判断一下,@sum1是否为null,因为null与任何值的计算结果均为null.
set @sum1=isnull(@sum2,0)+@sum3
set @i=@i-1
end
else
set @i=@i-1
end
GO---------
declare @re real,@re1 real
exec [compute] @re out,@re1 out
select 结果=@re,ee=@re1就出现:
服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@sum2'。
服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@sum2'。
为什么?