Sql 在varchar ID字段上大容量插入递增ID
如果我运行这样的查询:Sql 在varchar ID字段上大容量插入递增ID,sql,sql-server-2008,bulkinsert,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、 这是我正在做的一个简单的版本,但是这个例子是准确的 编辑:SQL Server 2008 感谢
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、 这是我正在做的一个简单的版本,但是这个例子是准确的
编辑:SQL Server 2008
感谢使用标识(mssql)、自动增量(mysql)或序列(psql/oracle/任何其他适当的数据库)。使用标识(mssql)、自动增量(mysql)或序列(psql/oracle/任何其他适当的数据库)。适用于mssql 2005+
insert into [table] (unique_id, [column])
select row_number() over (order by another_column) as id,
another_column from another_table
或
适用于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 another_column ) AS id,
another_column
FROM another_table
给你
注意:这不能确保使用行号()生成的ID在插入的表中是唯一的。查看该函数
INSERT INTO [table] (unique_id, [column])
SELECT ROW_NUMBER() OVER ( ORDER BY another_column ) AS id,
another_column
FROM another_table
给你
注意:这并不能确保您使用行号()生成的ID在您插入的表中是唯一的。我知道我可以使用标识,但我想看看是否可以使用我的SQL?@webnoob我认为您不能用自己的方式来做。max(unique\u id)
(以及任何其他类似表达式)在插入任何数据之前计算一次。这就是它的工作原理,你不能改变它。我也这么想。谢谢你的澄清。我知道我可以使用identity,但我想看看它是否符合我的SQL?@webnoob我认为你不能用你的方式来做。max(unique\u id)
(以及任何其他类似表达式)在插入任何数据之前计算一次。这就是它的工作原理,你不能改变它。我也这么想。感谢您的澄清。如果表中已经有ID为的值,会发生什么?我不会以重复的ID结束吗?是的,它肯定会复制ID(或者根据约束生成错误)。好的,看起来我需要使用Identity。谢谢。如果表中已经有ID为的值,会发生什么?我不会以重复的ID结束吗?是的,它肯定会复制ID(或者根据约束生成错误)。好的,看起来我需要使用Identity。谢谢。如果表中已经有ID为的值,会发生什么?如果表中已经有ID为的值,那么会发生什么呢?难道我不会得到重复的ID吗?说真的:只需使用INT-IDENTITY
列-这将为你节省太多的麻烦和悲伤,这完全不值得。这是一个有10年历史的程序,大约有200个表。虽然我更喜欢,但这是不可能的:)说真的:只需使用INT-IDENTITY
列-这将为您节省太多的麻烦和悲伤,这完全不值得。这是一个有10年历史的程序,大约有200个表。虽然我更喜欢,但这是不可能的:)