【问题标题】:T-SQL: How to join @variable tables (another try)T-SQL:如何加入@variable 表(再试一次)
【发布时间】:2012-12-10 14:16:41
【问题描述】:

我知道,这是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 运行。那么有什么想法为什么会出现此错误?

【问题讨论】:

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


    【解决方案1】:

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

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

    There is a Connect Item discussing this issue here

    【讨论】:

    • @_Errors 表中也没有File_IDdemo
    • @MahmoudGamal - 同意。如果没有来自 OP 的更多信息,不知道如何解决这个问题。他们需要确保更改表变量或查询中的列名。
    • @MahmoudGamal:所有名字都是固定的。
    【解决方案2】:

    这是因为 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-06
      • 2018-07-21
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2019-01-20
      相关资源
      最近更新 更多