2

我知道,这是这个问题的重复问题。但我遇到了同样的问题,也许我可以提供更多可用的信息。

如果我尝试以下示例查询:

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 运行。所以有什么想法为什么会出现此错误?

4

2 回答 2

14

要么给他们一个别名,然后在 中引用,JOIN要么使用方括号。下面混合了这两种可能性。

SELECT *
FROM   @_Errors Errors
       INNER JOIN @_Files 
         ON Errors.ID  = [@_Files].ID 

有一个连接项目在这里讨论这个问题

于 2012-12-10T14:18:02.197 回答
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
于 2012-12-10T14:30:39.553 回答