0

我一直试图弄清楚如何在生成脚本以重新创建数据库时正确适应如何处理“身份”列。

我需要为此生成脚本的最初原因是因为我必须将 SQL 数据库“降级”到旧版本。我知道数据库(v10.5)中的所有内容都与旧版本(v10.0)兼容。我面临的问题是,在复制数据库的 3 种不同方法中,它总是失败,因为它无法维护原始 ID 字段(即身份)。

我的每张桌子都有第一列ID: Int = PK & Identity。我也有很多情况下,该列中的表没有完全按顺序排列,例如 1、2、3、5、8、12、13 等。那只是因为这些记录过去已被删除。但似乎不可能以与以前相同的顺序重新插入原始 ID 号......

那么如何将数据库从服务器 A 完整复制(不备份/恢复)到服务器 B?注意:我可以从 Management Studio 连接到两台服务器上的两个数据库。此外,目标服务器不是我的,它是一个共享托管数据库,我只能访问我的数据库。我无权更改目标服务器设置。

我尝试了以下方法:

  • 为整个数据库选项生成脚本
  • 导出数据库选项
  • 备份/恢复数据库 - 由于版本不匹配而失败

我猜我可能只需要暂时“禁用”所有表上的身份规范,插入数据,然后重新打开身份。但是我对编写用于操作数据库结构的脚本感到很害怕。数据本身,我可以。但是在操作数据库结构时,我已经习惯了为此使用工具,以至于我什至从来没有花时间使用脚本——除了这个特定的场景,希望我也永远不必学习。

4

1 回答 1

1

我真的想通了。我已经知道必须有一种方法可以暂时禁用身份规范,但解决方案有点不同。不是“禁用”和“重新启用”身份规范,而是调用另一个命令(如上面的评论)IDENTITY_INSERT,当它打开时,它允许向身份字段插入值 - 您需要确保它被关闭也。交换机是按连接会话的IDENTITY_INSERT,因此它不会影响其他会话。只要IDENTITY_INSERT打开,您就可以为该标识字段插入具有特定值的记录 - 只要它仍在主键约束范围内。

实际的解决方案不是使用 编写脚本SET IDENTITY_INSERT MyTableName ON,而是在数据库导出实用程序(在 SQL 管理工作室中)中,选择表时,选择所有表并选择要使用的高级设置IDENTITY_INSERT

于 2012-01-30T21:35:12.357 回答