批量插入varchar ID字段上的递增ID

时间:2012-03-13 12:51:05

标签: sql sql-server-2008 bulkinsert

如果我运行这样的查询:

insert into table (unique_id, column) 
select 
(isnull(max(cast(unique_id as int)), 1) + 1 from table) as id, 
another_column
from another_table

unique_id字段始终为1,不会递增。有没有办法在插入时有这个增量?

p.s这是我正在做的简单版本,但示例是准确的

编辑:SQL Server 2008

由于

3 个答案:

答案 0 :(得分:1)

使用identity(mssql),auto_increment(mysql)或序列(psql / oracle /任何其他适当的DB)。

答案 1 :(得分:1)

对于mssql 2005 +

insert into [table] (unique_id, [column])  
select  row_number() over (order by another_column) as id,  
another_column from another_table 

insert into [table] (unique_id, [column])  
select  row_number() over (order by newid()) as id,  
another_column from another_table 

答案 2 :(得分:1)

查看ROW_NUMBER()功能。

INSERT INTO [table] (unique_id, [column])
SELECT      ROW_NUMBER() OVER ( ORDER BY another_column ) AS id,
            another_column
FROM        another_table 

这是a working example that you can play with

注意:这并不能确保您使用ROW_NUMBER()生成的ID在您插入的表格中是唯一的。