存储过程中的临时表列的列名无效

时间:2015-03-30 00:23:32

标签: sql-server

我有一个存储过程,其中创建了一个临时表:

我收到错误消息:

  

无效的列名称'ValFromUser'。

为什么?为什么我只为ValFromuser而不是其他列出现此错误?我怎么可能摆脱这个?

CREATE Procedure [dbo].[OutputProcedure]

--declarations here 
AS
BEGIN
SET NOCOUNT ON 

IF OBJECT_ID('tempdb.dbo.##Temp2') Is null
Begin
create table ##Temp2
(
Rownumber int not null,
ValFromUser nvarchar(30),
Percentage decimal(18, 4) not null
);

select * 
from dbo.ResultsStored
join (
    select 
        Rownumber,
        (SUM(Percentage) / @cnt) as Perc 
    from ##Temp2 
    GROUP BY 
        Rownumber, ValFromUser
) t -- Invalid column Name ValFromUser error here
    on dbo.ResultsStored.RowId = t.Rownumber
    and dbo.ResultsStored.HashedKey = HASHBYTES('MD5', @StringConcat)
end

End



Insert into dbo.ResultsStored( searchSerial,FinalSearchSeral, StringSearched, RowId,PercentMatch, HashedKey) 
select @searchNumber, @searchNumber, dbo.encrypt(@StringConcat), RowNumber, (SUM(Percentage)/@cnt) as Percentage , HASHBYTES('MD5', @StringConcat)
FROM ##Temp2 GROUP BY RowNumber, ValFromUser --Here

end

3 个答案:

答案 0 :(得分:1)

1:尝试选择## Temp2表并检查是否显示ValFromUser列。如果没有删除## Temp表并再次执行上述语句。

2:从“小数百分比(18,4)非空,

中删除最后一列之后的逗号(,)
create table ##Temp2
(
Rownumber int not null,
ValFromUser nvarchar(30),
--ColumnName nvarchar(30),
--ValFromFunc decimal(18, 4),
--FuncWeight decimal(18, 4),
Percentage decimal(18, 4) not null
);

3:在select语句中包含ValFromUser列

Select Rownumber, ValFromUser, (SUM(Percentage) / @cnt) as Perc 
FROM ##Temp2 
GROUP BY Rownumber, ValFromUser

尝试以上步骤,让我知道它是否能解决您的问题?

答案 1 :(得分:0)

在create table语句的最后一行。删除逗号(,)并再次回复您的结果。

create table ##Temp2
(
Rownumber int not null,
ValFromUser nvarchar(30),
--ColumnName nvarchar(30),
--ValFromFunc decimal(18, 4),
--FuncWeight decimal(18, 4),
Percentage decimal(18, 4) not null
);

答案 2 :(得分:0)

我也遇到过这种情况。我的 sp 中有一个临时表出现错误:

Invalid column name <column name> 

遇到这种情况时,我只是在运行存储过程。但是,存储过程是在查询窗口上运行的,我也在其中测试了代码(针对另一个错误),其中我声明了临时表,但没有指定错误字段(为简洁起见)。

当我重命名 sp 的临时表时,问题就消失了。所以,我猜测 sp 正在调用这个临时表,而不是我在 sp 中指定的那个。