我正在尝试创建一个 INSERT 脚本来从损坏的数据库中的单个表中抢救数据。
我已经成功地将数据库置于在线状态并将其置于紧急/单用户模式下(遵循此http://www.sqlskills.com/blogs/paul/disaster-recovery-101-hack-attach-a-damaged-database/ )
这允许对数据进行 SELECT。但是,当尝试在 SSMS 中使用“生成脚本”工具时,出现错误,因为已经存在与数据库的连接。我假设脚本工具正在尝试创建一个次级(sql server 本地?)连接/打开数据库来完成它的工作,但我的 SSMS 会话正在阻塞。
是否可以确保脚本工具使用与已建立的连接相同的连接?或者断开连接,但将数据库保持在紧急模式?
您可以断开连接,数据库将保持在 EMERGENCY/SINGLE 用户模式。SSMS 中的对象管理器确实使用它自己的连接。我不确定脚本生成器工具是否使用另一个连接。但是,无法保证您的生成脚本工具连接将在您删除它后占用一个连接。最好的办法是在备用数据库上生成您的脚本(无论您将数据移动到哪里都应该工作)。然后将该脚本复制到连接到数据库的查询窗口并运行它。
编辑:
好的,我做了一些测试。如果您删除查询连接并在对象资源管理器中打开一个连接,您可以编写一个 INSERT 语句(假设这是您想要的)。
在对象资源管理器中找到您的表,然后右键单击它。转到脚本表为 -> 插入到 -> 剪贴板
确保使用剪贴板。如果您执行新的查询窗口,它将失败。然后断开对象资源管理器并打开一个查询窗口到您的数据库并粘贴。
否则,我将需要有关
INSERT
您尝试创建的语句类型的更多信息。EDIT2:基于评论
假设您在同一个实例上有您的目标数据库(您试图将数据移动到的位置)(如果它至少暂时没有创建),那么请使用以下代码。
如果您有标识列,则必须执行以下操作