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

これは、INNERJOINがパラメーターが変数であることを想定しているためです。これは機能するはずです:

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 に答える