You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带索引、主键及标识功能的SQL表复制到另一服务器?

我之前也碰到过一模一样的坑!标识列(Identity)的保留确实容易在迁移时被忽略,你试的两种方法其实差了关键配置项,我给你几个亲测有效的解决方案:

方法1:修正SSMS生成脚本的核心配置

你之前用生成脚本的方法时,可能漏开了标识列专属的脚本选项,步骤调整如下:

  • 打开SSMS,右键源数据库 → 任务 → 生成脚本
  • 选择要迁移的目标表,进入「设置脚本选项」页面
  • 找到以下两个关键选项,都设为True:
    • 脚本标识(Script Identity):这个单独控制是否在CREATE TABLE语句中生成IDENTITY属性
    • 脚本数据类型的全部属性(Script all data type properties):确保列的所有属性(包括标识种子、增量)都被脚本化
  • 同时保持「要脚本的数据类型」选「架构和数据」,「脚本索引」设为True
  • 生成脚本后,在目标服务器执行前,记得在INSERT语句前加上:
    SET IDENTITY_INSERT [目标数据库].[dbo].[新表名] ON;
    
    插入完成后再关闭:
    SET IDENTITY_INSERT [目标数据库].[dbo].[新表名] OFF;
    
方法2:用SELECT INTO快速迁移(带标识属性)

如果源服务器和目标服务器能建立链接,这个方法最快捷:

  • 先在目标服务器创建链接服务器指向源服务器(SSMS→服务器对象→链接服务器→新建链接服务器)
  • 执行以下SQL,直接生成带标识列的新表:
    SELECT * INTO [目标库].[dbo].[新表名]
    FROM [源服务器].[源库].[dbo].[原表名]
    

    注意:这个方法会自动继承原表的标识属性,但不会自动复制主键和索引,所以需要额外从源表生成主键、索引的脚本,在目标表上执行。

方法3:用bcp命令行工具(精准控制标识)

如果是跨服务器迁移或者需要批量处理,bcp工具的可靠性更高,关键是用-E参数保留标识:

  1. 导出源表数据:
    bcp [源库].[dbo].[原表名] out "C:\temp\table_backup.bcp" -S 源服务器地址 -T -n
    
    (-T用Windows身份验证,-n用原生数据格式,速度更快)
  2. 创建目标表结构:从源服务器生成带标识、主键、索引的完整表结构脚本,在目标服务器执行,确保标识列的配置和原表完全一致
  3. 导入数据并保留标识:
    bcp [目标库].[dbo].[新表名] in "C:\temp\table_backup.bcp" -S 目标服务器地址 -T -n -E
    
    -E参数是核心,它会让bcp导入源数据中的标识值,同时保持目标表的标识列功能正常。
为什么之前的方法失败?
  • 方法1(导入导出向导):你可能只勾选了「插入标识值」,但向导默认生成的目标表结构没有保留IDENTITY属性——需要在向导的「设置目标表」步骤中,手动编辑表结构,把对应列设为标识列,再勾选插入标识值
  • 方法2(生成脚本):没开启「脚本标识」选项,导致CREATE TABLE语句中缺少IDENTITY(种子,增量)的定义,新表自然没有标识功能

内容的提问来源于stack exchange,提问作者Archana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:08:12