Наступний запит використовує ту ж ідею, що і в цьому дивовижному відповідь по ypercube :
SELECT x.*
FROM (SELECT NULL AS SomeCol) AS dummy
CROSS APPLY
(
SELECT
ID,
SomeCol AS MyTest
FROM dbo.Customers
) AS x;
Це працює так:
якщо dbo.Customers
стовпець названий SomeCol
, то SomeCol
в розділі SomeCol AS MyTest
буде вирішено як dbo.Customers.SomeCol
;
якщо в таблиці немає такого стовпця, посилання все одно буде дійсним, тому що тепер воно буде вирішено як dummy.SomeCol
: dummy
стовпці можуть бути посиланнями в цьому контексті.
Ви можете вказати кілька "запасних" стовпців таким чином. Хитрість полягає в тому, щоб не використовувати псевдонім таблиці для таких стовпців (що в більшості ситуацій нахмурене, але в цьому випадку пропуск псевдоніма таблиці допомагає вирішити проблему).
Якщо таблиця використовується при з'єднанні, а інша таблиця має свою власну SomeCol
, вам, ймовірно, потрібно буде використовувати вищезазначений запит як похідну таблицю перед тим, як використовувати його в з'єднанні, щоб зберегти трюк, як-от так:
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 ...
;