Я пытаюсь выполнить следующее:
SELECT col1, col2 FROM table1
UNION
SELECT col2, col3 FROM table2
В результате:
col1, col2, col3
1 , 1 , NULL
NULL, 1 , 1
Возвращается объединение столбцов и строк. Вы можете думать об этом как об UNION, эквивалентном 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
Но для этого нужно заранее знать имена столбцов. Мой конкретный сценарий и этот вопрос предполагают, что если имена столбцов соответствуют типам, они также совпадают. На самом деле все столбцы, которыми я пытаюсь манипулировать, относятся к одному типу.
Есть ли более простой способ сделать это?
Спасибо!