La siguiente consulta utiliza la misma idea que en esta sorprendente respuesta de ypercube :
SELECT x.*
FROM (SELECT NULL AS SomeCol) AS dummy
CROSS APPLY
(
SELECT
ID,
SomeCol AS MyTest
FROM dbo.Customers
) AS x;
Funciona así:
si dbo.Customers
tiene una columna llamada SomeCol
, a continuación, SomeCol
en la SomeCol AS MyTest
resolverá como dbo.Customers.SomeCol
;
si la tabla no tiene esa columna, la referencia seguirá siendo válida, porque ahora se resolverá como dummy.SomeCol
: las dummy
columnas pueden ser referenciadas en ese contexto.
Puede especificar múltiples columnas "de repuesto" de esa manera. El truco es no usar el alias de la tabla para tales columnas (que es una práctica mal vista en la mayoría de las situaciones, pero en este caso omitir el alias de la tabla lo ayuda a resolver el problema).
Si la tabla se usa en una combinación y la otra tabla tiene la suya SomeCol
, probablemente necesitará usar la consulta anterior como una tabla derivada antes de usarla en la combinación para mantener el truco funcionando, algo como esto:
SELECT ...
FROM
(
SELECT x.*
FROM (SELECT NULL AS SomeCol) AS dummy
CROSS APPLY (
SELECT
ID,
SomeCol AS MyTest
FROM dbo.Customers
) AS x
) AS cust
INNER JOIN ...
;