我知道,这是this question的重复问题。但我遇到了同样的问题,也许我可以提供更多可用的信息。
如果我尝试以下示例查询:
DECLARE @_Files TABLE (ID INT, Filename VARCHAR(MAX));
DECLARE @_Errors TABLE (ID INT, Label VARCHAR(MAX), Value VARCHAR(MAX));
insert into @_Files
select 73, 'abc'
insert into @_Errors
select 73, 'Some label name', 'Just a value'
select
*
from
@_Errors
inner join @_Files
on @_Errors.ID = @_Files.ID
我收到了错误消息:
The @_Errors-scalar variable must be declared.
The @_Files-scalar variable must be declared.
我正在使用SQL-Server 2008 R2 Express并且它在兼容级别100上运行。所以我知道为什么会出现此错误?
答案 0 :(得分:11)
为他们提供一个别名,然后在JOIN
中引用或使用方括号。以下内容混合了两种可能性。
SELECT *
FROM @_Errors Errors
INNER JOIN @_Files
ON Errors.ID = [@_Files].ID
答案 1 :(得分:1)
这是因为INNER JOIN期望参数是变量。 这应该有效:
DECLARE @_FileIDs TABLE (ID INT, Filename VARCHAR(MAX));
DECLARE @_Errors TABLE (ID INT, Label VARCHAR(MAX), Value VARCHAR(MAX));
insert into @_FileIDs
select 73, 'abc'
insert into @_Errors
select 73, 'Some label name', 'Just a value'
select
*
from
@_Errors AS tblErrors
inner join @_FileIDs AS tblFileID
on tblErrors.ID = tblFileID.ID