T-SQL:如何加入@variable表(另一个尝试)

时间:2012-12-10 14:16:42

标签: sql tsql sql-server-2008-express

我知道,这是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上运行。所以我知道为什么会出现此错误?

2 个答案:

答案 0 :(得分:11)

为他们提供一个别名,然后在JOIN中引用或使用方括号。以下内容混合了两种可能性。

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

There is a Connect Item discussing this issue here

答案 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