2013-04-17 39 views
0

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

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

我需要做的是采取的所有数据,并将其插入到新表,将在原表所有内容的顶部有一个ID列。我遇到的麻烦是插入语句,我知道我可以INSERT INTO然后运行一个选择语句,它会插入它,但我无法添加ID字段应自动递增。

回答

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保证的。但是,它在实践中为我工作。

+0

所有基本上都说同样的事情,你你说得透彻彻底,谢谢。 –

1

你可以使用:

ROW_NUMBER() OVER(ORDER BY Column1)

select

1

试试这个....

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

设置你的ID字段来标识字段