2012-12-10 1 views
2

나는 이것이 this question이라는 중복 질문입니다. 하지만 같은 문제가 발생하여 더 유용한 정보를 제공 할 수 있습니다.T-SQL : @variable 테이블을 결합하는 방법 (또 다른 시도)

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 

I 오류 메시지가 있어요 : 나는 2008 R2 Express를 SQL-Server를 사용하고

The @_Errors-scalar variable must be declared. 
The @_Files-scalar variable must be declared. 

을하고 호환성 수준에서 실행되고 난 다음 예제 쿼리를 시도 할 경우

100. 그래서 어떤 생각이라도 나는 왜이 오류를 얻 느냐?

답변

11

JOIN에서 참조하거나 대괄호를 사용하여 별칭을 지정하십시오. 아래는 두 가지 가능성을 혼합 한 것입니다.

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

There is a Connect Item discussing this issue here

+0

는 또한'@ _Errors'의 테이블에'File_ID'이 없습니다. [** 데모 **] (http://www.sqlfiddle.com/#!3/d41d8/6999) –

+0

@MahmoudGamal - 동의. OP에서 더 많은 정보 없이는 그것을 해결하는 방법을 모르겠다. 테이블 변수 또는 쿼리에서 열 이름을 변경해야합니다. –

+0

@MahmoudGamal : 모든 이름이 고정되어 있습니다. – Oliver

1

내부 조인 때문이다 파라미터 변수 기대한다. 이 작동합니다 :

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