Các truy vấn sau đây sử dụng ý tưởng giống như trong câu trả lời tuyệt vời này bởi ypercube :
SELECT x.*
FROM (SELECT NULL AS SomeCol) AS dummy
CROSS APPLY
(
SELECT
ID,
SomeCol AS MyTest
FROM dbo.Customers
) AS x;
Nó hoạt động như thế này:
nếu dbo.Customers
có một cột được đặt tên SomeCol
, thì SomeCol
trong SomeCol AS MyTest
sẽ giải quyết như dbo.Customers.SomeCol
;
nếu bảng không có cột như vậy, tham chiếu vẫn sẽ hợp lệ, vì bây giờ nó sẽ được giải quyết dưới dạng dummy.SomeCol
: dummy
các cột có thể được tham chiếu trong ngữ cảnh đó.
Bạn có thể chỉ định nhiều cột "dự phòng" theo cách đó. Mẹo nhỏ là không sử dụng bí danh bảng cho các cột như vậy (đây là một cách thực hành trong hầu hết các tình huống, nhưng trong trường hợp này, bỏ qua bí danh bảng sẽ giúp bạn giải quyết vấn đề).
Nếu bảng được sử dụng trong một liên kết và bảng khác có bảng riêng SomeCol
, có lẽ bạn sẽ cần sử dụng truy vấn trên dưới dạng bảng dẫn xuất trước khi sử dụng nó trong liên kết để giữ cho thủ thuật hoạt động, đại loại như sau:
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 ...
;