我将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
字段时遇到了麻烦。
答案 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保证的。但是,它在实践中对我有用。