Копирование таблицы 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] в избранном. Вы можете использовать приведение, чтобы получить нужный тип в новой таблице.

Другие вопросы по тегам