Я пытаюсь сделать следующее:
SELECT col1, col2 FROM table1
UNION
SELECT col2, col3 FROM table2
С результатом:
col1, col2, col3
1 , 1 , NULL
NULL, 1 , 1
Объединение столбцов и строк возвращается. Вы могли бы думать об этом как об объединении, эквивалентном FULL OUTER JOIN.
Простой ответ на этот вопрос:
SELECT col1, col2, NULL AS col3 FROM table1
UNION
SELECT NULL AS col1, col2, col3 FROM table2
Это, однако, трудно сделать с динамическим T-SQL и dbo.sp_executesql, и результирующий запрос может быть слишком длинным, если задействовано большое количество UNIONS.
Лучшее решение, которое я мог придумать, - это создать временную таблицу со всеми возможными столбцами и по очереди вставить каждый выбор во временную таблицу, как показано ниже:
CREATE TABLE #temp ( col1 int, col2 int, col3 int )
INSERT INTO #temp ( col1, col2 ) SELECT col1, col2 FROM table1
INSERT INTO #temp ( col2, col3 ) SELECT col2, col3 FROM table2
Но для этого необходимо заранее знать, как называются имена столбцов. Мой конкретный сценарий и этот вопрос предполагают, что если имена столбцов совпадают, типы также совпадают. На самом деле все столбцы, которыми я пытаюсь манипулировать, одного типа.
Есть ли более простой способ сделать это?
Спасибо!