2012-07-03 126 views
2

我在函数中有三个单独的表变量, 其中1个不给我任何错误,另外两个是, 我没有在它们之间找到任何不同的Syntax-wise,但也许我需要更多的咖啡因。必须声明标量

我收到的错误是

必须声明标量变量 “@DispoTable”。

DECLARE @CIDdisp INT 

DECLARE @DispoTable TABLE 
(
    CaseID INT, 
    Code INT, 
    Description VARCHAR(150) 
) 
--Gather Data From filter 
SELECT @CIDdisp = CaseID, @Code = Code, @Description = Description 
FROM fnRecidFilter3(@CaseID,01,01) 
-- Insert into Temp table 
INSERT INTO @DispoTable (CaseID, Code, Description) 
VALUES (@CIDdisp, @Code, @Description) 
-- Merge the Temp Table with RecidReport Table 
INSERT INTO RecidReport(Code, Description) 
SELECT Code, Description 
FROM @DispoTable 
WHERE (@DispoTable.CaseID) = CaseID 

是有,我失去了一些东西?

+0

你从哪里得到错误 – phadaphunk

+0

你也可以发布工作函数 – phadaphunk

回答

4

你不能说:

WHERE (@DispoTable.CaseID) = CaseID 

相反,你需要使用一个别名:

FROM @DispoTable AS d 
WHERE d.CaseID = CaseID 

但这一条款是没有意义的反正。你的意思是在这里使用变量吗?也许:

FROM @DispoTable AS d 
WHERE d.CaseID = @CIDdisp 

+0

我有一个主要的表,我把数据放入。我希望以某种方式将数据放入该表中,以便稍后可以取出无关数据。也许我正在考虑where语句的顺序。 – Malachi

+0

我不明白“WHERE”条款甚至应该做什么。但是你得到错误信息的原因是因为你不能通过'FROM'之外的名称来引用表变量 - 在其他地方你需要使用别名。关于WHERE条款是否有意义的评论是周边的。 –

+0

之所以第一个没有抛出相同的错误是因为我从存储过程中剪切和粘贴,并且在那里使用临时表,并忘记在where语句中将'#'更改为'@'。否则别名解决了它,我认为它与where语句中的()有关系(主表中的()) – Malachi