我知道如果我想复制一个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列。我不需要有一个查询将这些数据添加到列中,只需要添加到裸列。
答案 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]
。
您可以使用强制转换来获取新表中所需的类型。