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



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

我收到一个错误,上面写着:

列名"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

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:在选择语句中包括ValFromUser列

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

试试上面的步骤,让我知道它是否解决了你的问题?

我也遇到过这种情况。我的sp中有一个临时表,它得到了错误:

Invalid column name <column name> 

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

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

在createtable语句的最后一行。删除逗号(,),然后再次回复您的结果。
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
);

最新更新