Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O identificador de várias partes não pôde ser vinculado no SQL Server 2008


O exemplo de código que você mostrou tinha elipses e acredito que é o que está nas elipses que está causando o problema.

Você tem:
SELECT R.[ID], C.[name] AS [company], ...
FROM [requests] AS R, ...
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID

Digamos que seja algo como:
SELECT R.[ID], C.[name] AS [company], X.Field
FROM [requests] AS R, [eXample] as X 
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID
WHERE X.[request_id] = R.ID

Em outras palavras, a mistura da sintaxe de junção interna pré-ANSI 92 com a sintaxe de junção externa ANSI 92. Testando no SQL Server 2005, parece que o alias R para solicitações não é visto além da vírgula que separa R de ... no seu exemplo, e [eXample] como X no meu. O seguinte, no entanto, funcionou:
SELECT R.[ID], C.[name] AS [company], X.Field
FROM [eXample] as X, [requests] AS R 
-- Requests and companies on the same side of the comma
LEFT OUTER JOIN [companies] AS C
ON R.[company_id] = S.ID
WHERE X.[request_id] = R.ID

ou
SELECT R.[ID], C.[name] AS [company], X.Field
FROM [requests] AS R LEFT OUTER JOIN [companies] AS C
    ON R.[company_id] = S.ID, [eXample] as X 
WHERE X.[request_id] = R.ID
-- Yuck, I would hate to find this. Not at all sure from reading
-- the code how it would work.

ou meu favorito, porque gosto da sintaxe de junção ANSI 92:
SELECT R.[ID], C.[name] AS [company], X.Field
FROM [requests] AS R
INNER JOIN [eXample] as X ON X.[request_id] = R.ID
LEFT OUTER JOIN [companies] AS C ON R.[company_id] = S.ID