Используйте UNION
для удаления дубликатов - это медленнее, чем UNION ALL
для этой функции:
SELECT CASE
WHEN LEN(LTRIM(RTRIM(column1))) = 0 THEN NULL
ELSE column1
END AS column1,
CASE
WHEN LEN(LTRIM(RTRIM(column2))) = 0 THEN NULL
ELSE column2
END AS column2
FROM TableA
UNION
SELECT CASE
WHEN LEN(LTRIM(RTRIM(column1))) = 0 THEN NULL
ELSE column1
END,
CASE
WHEN LEN(LTRIM(RTRIM(column2))) = 0 THEN NULL
ELSE column2
END
FROM TableB
Я изменил логику, чтобы она возвращала NULL, если значение столбца содержит любое количество пробелов и не содержит фактического содержимого.
CASE
выражения являются ANSI и более настраиваемы, чем синтаксис NULLIF / etc.