如何批量启用多表Identity Insert?SQL Server 2014导入导出向导需求
如何让SQL Server导入导出向导默认勾选Enable Identity Insert
我之前也碰到过这个头疼的问题,手动几百次点编辑映射简直要疯!下面几个方法可以帮你解决默认勾选Enable Identity Insert的需求:
方案1:批量编辑所有表的映射(最快的临时解决方法)
当你在导入导出向导走到「选择源表和视图」这一步时,别着急逐个处理:
- 按下
Ctrl+A全选所有504张表 - 点击界面顶部的**「编辑映射...」按钮**(注意是选中所有表后点这个全局按钮,不是单个表的右键选项)
- 在弹出的「列映射」窗口里,勾选「Enable identity insert」选项,然后点击确定
这样所有选中的表都会一次性启用身份插入,不用再逐个重复操作!这个小技巧很多人容易忽略,能直接帮你省去几百次点击。
方案2:保存为SSIS包并批量修改属性(适合重复同步场景)
如果之后还要频繁做这类数据同步,建议把向导流程保存成SSIS包,再批量修改默认配置:
- 在导入导出向导的最后一步,选择「保存SSIS包」,可以保存到本地文件或者SQL Server实例中
- 打开SQL Server Data Tools(SSDT),加载这个保存好的SSIS包
- 在数据流面板里,全选所有「OLE DB目标」组件(按住
Ctrl多选或者用Ctrl+A全选) - 在右侧的属性面板里,找到IdentityInsert属性,将其值改为
True - 保存包后,以后每次运行这个包都会自动启用身份插入,再也不用手动勾选了
方案3:用T-SQL脚本批量控制身份插入(适合自动化/命令行场景)
如果偏好纯脚本操作,也可以在数据导入前后批量执行身份插入的开关语句:
步骤1:生成启用Identity Insert的脚本
在目标数据库执行以下SQL,会生成所有表的启用语句:
SELECT 'SET IDENTITY_INSERT [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] ON;' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
步骤2:执行数据导入
可以继续用导入导出向导完成数据复制,或者用bcp、OPENROWSET等工具批量导入
步骤3:生成关闭Identity Insert的脚本
导入完成后,执行以下SQL生成关闭语句:
SELECT 'SET IDENTITY_INSERT [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] OFF;' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
这个方法很适合配合SQL Agent作业做定时自动同步,完全不用手动干预。
注意:无论用哪种方法,都要确保源表和目标表的身份列数据完全匹配,避免导入后出现主键冲突或者身份值混乱的问题。
内容的提问来源于stack exchange,提问作者Stephen Last
相关产品推荐
相关产品推荐

