CREATE PROCEDURE [compute3] 
 --定义输出参数
@#2冷却水泵电流 real output---1
AS
--定义存储过程内部变量
declare @a varchar(100),
@i int,
@b varchar(100)
,@sql nvarchar(4000)  --这里要定义为nvarchar类型
,@#2冷却水泵电流1 real        
--给定义的变量赋初值0
set @#2冷却水泵电流=0
--给定义的内部变量赋初值0set @#2冷却水泵电流1=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
                           --查询数据库中的参数,内部变量=sum(字段名)
set @sql='select 
@#2冷却水泵电流1=sum(#2冷却水泵电流) from '+@a+' where 时间='+@b+'0800 or 时间='+@b+'1600 or 时间   ='+@b+'2355' --动态得到表
exec sp_executesql @sql,N'@#2冷却水泵电流 real output ',
@#2冷却水泵电流1 output
    --输出内部变量-
  set @#2冷却水泵电流=isnull(@#2冷却水泵电流1,0)+@#2冷却水泵电流        
set @i=@i-1
end
             else
set @i=@i-1
 end
GO#2冷却水泵电流  这个是我的字段名称 在过程里这样的字段会有问题吗?谢谢大虾们帮我看看谢谢!!

解决方案 »

  1.   

    动态sql的错误,是在执行时才发现的在
    exec sp_executesql @sql
    前,print @sql看看,结果能否粘贴到查询分析器里执行
      

  2.   


    --用[#2冷却水泵电流]就行了
    CREATE PROCEDURE [compute3] 
     --定义输出参数
    @#2冷却水泵电流 real output---1
    AS
    --定义存储过程内部变量
    declare @a varchar(100),
    @i int,
    @b varchar(100)
    ,@sql nvarchar(4000)  --这里要定义为nvarchar类型
    ,@#2冷却水泵电流1 real        
    --给定义的变量赋初值0
    set @#2冷却水泵电流=0
    --给定义的内部变量赋初值0set @#2冷却水泵电流1=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
                               --查询数据库中的参数,内部变量=sum(字段名)
    set @sql='select 
    @#2冷却水泵电流1=sum([#2冷却水泵电流]) from '+@a+' where 时间='+@b+'0800 or 时间='+@b+'1600 or 时间   ='+@b+'2355' --动态得到表
    exec sp_executesql @sql,N'@#2冷却水泵电流 real output ',
    @#2冷却水泵电流1 output
        --输出内部变量-
      set @#2冷却水泵电流=isnull(@#2冷却水泵电流1,0)+@#2冷却水泵电流        
    set @i=@i-1
    end
                 else
    set @i=@i-1
     end
    GO