我有一个存储过程,其中创建了一个临时表:
我收到错误消息:
无效的列名称'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
答案 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 中指定的那个。