在緊急/單使用者模式下使用“生成腳本”
我正在嘗試創建一個 INSERT 腳本來從損壞的數據庫中的單個表中搶救數據。
我已成功將數據庫置於聯機狀態並將其置於緊急/單使用者模式(遵循此http://www.sqlskills.com/blogs/paul/disaster-recovery-101-hack-attach-a-damaged-database/ )
這允許對數據進行選擇。但是,當嘗試在 SSMS 中使用“生成腳本”工具時,我收到一個錯誤,因為已經存在與數據庫的連接。我假設腳本工具正在嘗試創建第二個(本地 sql 伺服器?)連接/打開數據庫以完成其工作,但我的 SSMS 會話被阻塞。
是否可以確保腳本工具使用與已建立的連接相同的連接?還是斷開連接,但將數據庫保持在 EMERGENCY 模式?
您可以斷開連接,數據庫將保持在 EMERGENCY/SINGLE 使用者模式。SSMS 中的對像管理器確實使用它自己的連接。我不確定腳本生成器工具是否使用另一個連接。但是,無法保證您的生成腳本工具連接將在您斷開連接後佔用一個連接。最好的辦法是在備用數據庫上生成腳本(無論您將數據移動到哪裡都應該可以工作)。然後將該腳本複製到連接到數據庫的查詢視窗並執行它。
編輯:
好的,我做了一些測試。如果您刪除查詢連接並在對象資源管理器中打開一個連接,您可以編寫一個 INSERT 語句(假設這是您想要的)。
在對象資源管理器中找到您的表,然後右鍵點擊它。轉到腳本表為 -> 插入到 -> 剪貼板
確保使用剪貼板。如果您執行新的查詢視窗,它將失敗。然後斷開對象資源管理器並打開數據庫的查詢視窗並粘貼。
否則,我將需要有關
INSERT
您嘗試創建哪種類型的語句的更多資訊。EDIT2:基於評論
假設您在同一個實例上擁有目標數據庫(您試圖將數據移動到的位置)(如果至少暫時沒有創建一個),則使用以下程式碼。
INSERT INTO DestinationDB.dbo.DestinationTable SELECT * FROM SourceTable
如果您有一個身份列,那麼您將必須執行以下操作
SET IDENTITY_INSERT DestinationDB.dbo.DestinationTable ON INSERT INTO DestinationDB.dbo.DestinationTable (Field List) SELECT [Field List] FROM SourceTable SET IDENTITY_INSERT DestinationDB.dbo.DestinationTable OFF