从现有表插入添加了ID的新表

时间:2013-04-17 15:08:25

标签: sql tsql

我将Excel电子表格中的数据导入表格,现在我需要转换部分数据,然后将其插入另一个表格。两个表格中的所有内容都是相同的,只有一些VARCHAR会更改为BIT类型,而新表格会有一个ID字段。

SELECT Column1, Column2, CASE Column3 WHEN 'Y' THEN 1 ELSE 0 END AS 'Column3'
FROM MyTable

我需要做的是获取所有数据并将其插入到一个新表中,该表将在原始表中的所有内容之上放置一个ID列。我遇到麻烦的是insert语句,我知道我可以INSERT INTO然后运行一个select语句然后插入它,但是我在添加应该自动递增的ID字段时遇到了麻烦。

3 个答案:

答案 0 :(得分:1)

你可以使用:

ROW_NUMBER() OVER(ORDER BY Column1)

select

答案 1 :(得分:1)

试试这个......

 Insert into YourTableName(Column1,Column2,Column3) (SELECT Column1, Column2, CASE Column3 WHEN 'Y' THEN 1 ELSE 0 END AS 'Column3'
    FROM MyTable)

将您的ID字段设置为标识字段

答案 2 :(得分:1)

如果您稍后要使用新表,则需要使用id列创建它:

create table NewTable (
    NewTableId int not null identity(1, 1),
    <your columns here>
)

然后插入:

insert into NewTableId(<your columns here>)
    select <your columns here>
    from StagingTable

这也为您提供了优化列类型的机会。

如果您只想要第一个插入的增量编号:

select row_number() over (order by (select NULL)) as NewTableId,
       t.*
into NewTable
from t

我发现在order by中使用常量表达式比使用列名更快。性能优势是严格的经验,并不是Microsoft保证的。但是,它在实践中对我有用。