使用SSMS导入向导追加表时,如何实现ID自增?
高效解决SSMS导入Excel时的ID自增问题
方法一:临时调整目标表ID属性,导入后自动填充
- 先执行SQL移除目标表ID列的标识属性:
ALTER TABLE [你的目标表名] ALTER COLUMN [ID列名] INT NULL
- 打开SSMS导入向导,在映射界面取消ID列的映射,直接导入其他列数据
- 导入完成后,执行SQL自动为新增行生成自增ID:
DECLARE @MaxID INT = (SELECT ISNULL(MAX([ID列名]), 0) FROM [你的目标表名]) UPDATE [你的目标表名] SET [ID列名] = @MaxID + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) WHERE [ID列名] IS NULL
- 最后恢复ID列的标识属性(如果原表有主键约束,需先删除再重建):
ALTER TABLE [你的目标表名] ALTER COLUMN [ID列名] INT NOT NULL ALTER TABLE [你的目标表名] ADD CONSTRAINT PK_你的表名_ID PRIMARY KEY CLUSTERED ([ID列名]) ALTER TABLE [你的目标表名] ALTER COLUMN [ID列名] INT IDENTITY(1,1)
操作前建议备份表,避免数据异常。
方法二:用OPENROWSET直接导入并生成ID
跳过导入向导,直接通过SQL语句完成导入,同时自动计算ID:
DECLARE @MaxID INT = (SELECT ISNULL(MAX([ID列名]), 0) FROM [你的目标表名]) INSERT INTO [你的目标表名] ([ID列名], [列名1], [列名2], ...) SELECT @MaxID + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), [Excel列1], [Excel列2], ... FROM OPENROWSET( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=C:\你的Excel文件路径.xlsx', 'SELECT * FROM [Sheet1$]' )
注意:服务器需安装ACE驱动,且SQL服务账号要有Excel文件的访问权限。
方法三:在导入向导中自定义查询生成ID
- 导入向导走到「Specify Table Copy or Query」步骤时,选择「Write a query to specify the data to transfer」
- 编写查询时直接生成自增ID:
DECLARE @MaxID INT = (SELECT ISNULL(MAX([ID列名]), 0) FROM [你的目标表名]) SELECT @MaxID + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS [ID列名], [Excel列1], [Excel列2], ... FROM [Sheet1$]
- 后续步骤正常映射列,直接完成导入即可。
内容的提问来源于stack exchange,提问作者Jacob Lindsey
相关产品推荐
相关产品推荐

