我一直试图弄清楚如何正确地适应如何处理“身份”问题。生成脚本以重新创建数据库时的列。
我需要为此生成脚本的原因是因为我必须降级' SQL数据库到旧版本。我知道数据库中的所有内容(v10.5)都与旧版本(v10.0)兼容。我面临的问题是,在3种不同的复制数据库方法中,它总是失败,因为它无法维护原始的ID字段(即身份)。
我的每张桌子都有第一列ID: Int = PK & Identity
。我也有很多情况,表格在这一栏中并不完美顺序,例如,1,2,3,5,8,12,13等。这只是因为那些记录已被删除了过去。但似乎无法以与以往相同的顺序重新插入原始ID号...
那么如何从服务器A到服务器B完整地复制(不备份/恢复)数据库?注意:我可以从Management Studio连接到两台服务器上的两个数据库。此外,目标服务器不是我的,它是一个共享的托管数据库,我只能访问我的数据库。我无权更改目标服务器设置。
我尝试过以下方法:
我猜我可能只是暂时禁用'所有表上的标识规范,插入数据,然后重新打开身份。但我编写脚本来操纵数据库结构非常糟糕。数据是我自己,我能做到的。但是操纵数据库结构,我已经习惯了使用这个工具,以至于我从来没有花时间去处理脚本 - 除了这个特殊的场景之外,希望我从来不需要学习任
答案 0 :(得分:1)
我实际上已经明白了。我已经知道必须有一种暂时禁用身份规范的方法,但解决方案有点不同。除了“禁用”和“重新启用”身份规范之外,还有一个名为IDENTITY_INSERT
的命令(如上面的注释中所述),当打开时,它允许将值插入到身份字段中 - 您需要确保它也会被切换回来。 IDENTITY_INSERT
开关是每个连接会话,因此它不会影响其他会话。只要IDENTITY_INSERT
处于启用状态,就可以插入具有该标识字段特定值的记录 - 只要它仍在主键约束内。
实际的解决方案不是用SET IDENTITY_INSERT MyTableName ON
编写脚本,而是在数据库导出实用程序(在SQL管理工作室中)编写,在选择表时,选择所有表并选择要使用的高级设置{ {1}}。