复制SQL Server表并添加和重新排列列

时间:2015-11-20 18:00:19

标签: sql sql-server select-into

我知道如果我想复制一个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 个答案:

答案 0 :(得分:1)

这是修改select语句的问题。 SELECT *仅按顺序获取源表中的列。你想要不同的东西 - 所以SELECT

SELECT * INTO NewTable
  FROM OldTable

- >

SELECT Col1, col3, col2, ' ' AS col4, ' ' AS col5
  INTO NewTable
  FROM OldTable

就表格的列和索引等方式而言,这几乎没有什么灵活性 - 所以这可能是一个坏主意,可能更好的做到另一种方式(正确CREATE TABLE),但如果你需要我想,快速又脏兮兮......

答案 1 :(得分:1)

您只需命名列:

Select
[Column1], [Column3], [Column2], Cast(null as bigint) as [Column4], 0 as [Column5]
Into CopyTable
From YourTable

就像任何查询一样,最好使用列名并避免使用*

然后,您可以在选择中添加任何值as [ColumnX]。 您可以使用强制转换来获取新表中所需的类型。