我要算一周7天中,每天的平均Ot,由于过程重复,用存储过程做,但没得到想要的结果。
create table #o(o_week char,avgot float)  --创建临时表存储数据
select * from #ocreate proc computeot @week char
as
declare @avgot float(8)
select @avgot=avg(Ot) from link_model   --link_model是事先建立好的视图,有需要的Ot一列,还有Ot对应的‘星期’
where model_week=@week
insert into #o values(@week,@avgot)  --将数据插入临时表#o中,以备后用。declare @week char
select @week='星期二'
exec computect @week 
比如我现在要算星期二的平均季节性系数,但是临时表里显示的星期那个字段没值(没显示任何),avgot的值则显示NULL。我试过单独算,能得到我要的结果。
declare @avgot float(8)
select @avgot=avg(Ot) from link_model
where model_week='星期二'
print @avgot
请帮我看看!

解决方案 »

  1.   

    Trycreate table #o(o_week char,avgot float)  --创建临时表存储数据
    select * from #o
    GO
    create proc computeot @week char
    as
    insert into #o Select @week,avg(Ot) from  link_model where model_week=@week
    GO
    declare @week char
    select @week='星期二'
    exec computect @week
      

  2.   

    不能在存储过程外创建临时表,然后在存储过程中将数据保存到临时表中。你可以创建一个表值函数来实现你的需求:
    Create Function dbo.computeot(@week char(6))
    Return table
    AS
    Return(
        SELECT week=@week,Otavg=avg(Ot) from link_model  where model_week=@week
    )调用:
    select * from dbo.computeot('星期二')
      

  3.   

    create table #o([o_week] char(10),avgot float)  --创建临时表存储数据
    select * from #o
    gocreate proc computeot 
    (@week char(10))
    as
    declare @avgot float(8)
    select @avgot=avg(Ot) from link_model   --link_model是事先建立好的视图,有需要的Ot一列,还有Ot对应的‘星期’
    where model_week=@week
    insert into #o values(@week,@avgot)  --将数据插入临时表#o中,以备后用。
    godeclare @week char(10)
    select @week='星期二'
    exec computeot @week
    select * from #o
      

  4.   

    xzq111() 
    不能在存储过程外创建临时表,然后在存储过程中将数据保存到临时表中。
    -----------------------------------------------------------------
    錯誤,看看這個例子.
    --建立測試環境
    Create Table TEST(ID Int,Name Varchar(10))
    Insert TEST Select 1,'A'
    Union All Select 2,'B'
    Union All Select 3,'C'Create Table #T(ID Int,Name Varchar(10))
    GO
    --建立存儲過程
    Create Proc TESTProc
    As
    Insert #T Select * from TEST
    GO
    --測試
    Select * from #T
    EXEC TESTProc
    Select * from #T
    GO
    --刪除測試環境
    Drop Table TEST,#T
    Drop Proc TESTProc
    --結果
    /*
    --執行存儲過程前
    ID Name--執行存儲過程後
    ID Name
    1 A
    2 B
    3 C
    */
      

  5.   

    你在定义变量时没有定义长度,如@week char应该为@week char(10)