0

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

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

我需要做的是获取所有这些数据并将其插入到一个新表中,该表将在原始表中的所有内容之上都有一个 ID 列。我遇到的问题是插入语句,我知道我可以INSERT INTO运行一个选择语句并将其插入,但我无法添加ID应该自动递增的字段。

4

3 回答 3

1

你可以使用:

ROW_NUMBER() OVER(ORDER BY Column1)

在你的select

于 2013-04-17T15:10:35.410 回答
1

试试这个....

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

将您的 id 字段设置为身份字段

于 2013-04-17T15:14:14.233 回答
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 不保证。但是,它在实践中对我有用。

于 2013-04-17T15:22:08.003 回答