Копирование таблицы SQL Server, добавление и перестановка столбцов
Я знаю, что если я хочу сделать копию таблицы SQL Server, я могу написать запрос, похожий на этот:
SELECT *
INTO NewTable
FROM OldTable
Но что, если я хочу взять содержимое OldTable
это может выглядеть так:
| Column1 | Column2 | Column3 |
|---------|---------|---------|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
и сделайте копию этой таблицы, но новая таблица будет выглядеть так:
| Column1 | Column3 | Column2 | Column4 | Column5 |
|--------- |--------- |--------- |--------- |--------- |
| 1 | 3 | 2 | 10 | 11 |
| 4 | 6 | 5 | 12 | 13 |
| 7 | 9 | 8 | 14 | 15 |
Итак, теперь я поменял местами столбцы 2 и 3 и добавил столбец 4 и столбец 5. Мне не нужен запрос, который добавит эти данные в столбцы, только в пустые столбцы.
2 ответа
Это вопрос изменения вашего оператора выбора. SELECT *
берет только столбцы из исходной таблицы, в их порядке. Вы хотите что-то другое - так SELECT
Это.
SELECT * INTO NewTable
FROM OldTable
->
SELECT Col1, col3, col2, ' ' AS col4, ' ' AS col5
INTO NewTable
FROM OldTable
Это дает вам очень небольшую гибкость в отношении того, как определяются столбцы таблицы и индексы и тому подобное - так что, вероятно, это плохая идея, возможно, лучше сделать это по-другому (правильно CREATE TABLE
), но если вам нужно быстро и грязно, я полагаю...
Вы можете просто назвать столбцы:
Select
[Column1], [Column3], [Column2], Cast(null as bigint) as [Column4], 0 as [Column5]
Into CopyTable
From YourTable
Как и любой запрос, всегда предпочтительно использовать имена столбцов и избегать использования *
,
Затем вы можете добавить любое значение as [ColumnX]
в избранном. Вы можете использовать приведение, чтобы получить нужный тип в новой таблице.