1

我知道如果我想复制一个 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 列。我不需要将数据添加到列中的查询,只需将裸列添加到列中即可。

4

2 回答 2

1

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

SELECT * INTO NewTable
  FROM OldTable

->

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

就表的列的指定方式和索引等而言,这给您带来的灵活性很小 - 所以这可能是一个坏主意,最好以另一种方式(正确地CREATE TABLE)这样做,但如果你需要快速和肮脏,我想.. .

于 2015-11-20T18:03:39.707 回答
1

您可以只命名列:

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

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

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

于 2015-11-20T18:05:37.010 回答