我有一个存储过程,其中创建了一个临时表:
我收到一个错误,上面写着:
列名"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中指定的那个。
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
);