sql >> Base de Datos >  >> RDS >> Sqlserver

El identificador de varias partes no se pudo vincular en SQL Server 2008

El ejemplo de código que mostró tenía puntos suspensivos y creo que es lo que está en los puntos suspensivos lo que está causando el problema.

Tienes:

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 es 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

En otras palabras, la combinación de la sintaxis de combinación interna anterior a ANSI 92 con la sintaxis de combinación externa ANSI 92. Al probar en SQL Server 2005, parece que el alias R para solicitudes no se ve más allá de la coma que separa a R de... en su ejemplo, y [eXample] como X en el mío. Sin embargo, lo siguiente funcionó:

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

o

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.

o mi favorito, porque me gusta la sintaxis de combinación 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