SQL中如何实现主键自增插入?已创建表无法修改的解决方案
实现主键自增插入10条记录的方案
无需修改原表的直接实现方式
因为原表无法修改,可通过SQL生成自增序列来插入数据,避免主键重复:
方法1:递归CTE生成序列
WITH Numbers AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM Numbers WHERE num < 10 ) INSERT INTO [db].[schema].[table1] ([id], [status], [date], [username], [date2], [username2], [description]) SELECT num, 'A', '2021-01-01T05:30:44', 'abc', '2021-04-01T05:30:44', 'xyz', 'DESC' FROM Numbers;
递归CTE会生成1到10的连续数字,作为主键id插入,确保每条记录主键唯一且递增。
方法2:利用系统表生成序列
INSERT INTO [db].[schema].[table1] ([id], [status], [date], [username], [date2], [username2], [description]) SELECT TOP 10 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS id, 'A', '2021-01-01T05:30:44', 'abc', '2021-04-01T05:30:44', 'xyz', 'DESC' FROM sys.all_columns;
通过ROW_NUMBER()函数生成1到10的序号,结合系统表sys.all_columns(数据量足够生成10条记录)来完成插入。
是否需要新建表再导入?
- 若仅为一次性插入10条数据,上述方法已满足需求,无需新建表,操作更高效直接。
- 若后续需要频繁插入带自增主键的数据,且原表无法设置
IDENTITY自增属性,可考虑新建带自增主键的表,导入原表数据后用新表处理后续操作。但针对当前单次需求,建表属于冗余操作,没必要额外增加复杂度。
内容的提问来源于stack exchange,提问作者carrotcake
相关产品推荐
相关产品推荐

