ココがダメ
SqlServerにテーブルだけ復元する機能があれば今回の手法は必要なかった
しかし、探しても方法が無く仕方なく別の方法でテーブルだけ復元しました。
(手順1)データベースを複製し別のデータベースを作成
テーブルを戻したいデータベースを複製して、別のデータベースを作成するところから始まります。
「データベース」を右クリックして、「データベースの復元」を選択します。
復元したいテーブルのバックアップファイルを選択して、OKします。
そして、転送先のデータベースがデフォルトで
現在のデータベース名になっていると思いますので、それを複製したいデータベース名に変更するだけ
です。自分の場合は、「Logistics_testdata」という名前にしてデータベースの複製をしました。
(手順2)データベースから復元したいテーブルを消す
もちかしたら違う方法があるのかもしれませんが仕方ありません。
まず、現在のデータベースから、復元したいテーブルだけを消します。
自分の場合は、上の図のように、3つのテーブルを復元させたかったので消しました。
消し方は、右クリックして「削除」なので簡単ですね。
(手順3)クエリを作成して実行するだけ
あとは、下記のクエリを実行するだけです。
SELECT * INTO Logistics.dbo.[stock] FROM Logistics_testdata.dbo.[stock] SELECT * INTO Logistics.dbo.[arrival] FROM Logistics_testdata.dbo.[arrival] SELECT * INTO Logistics.dbo.[order] FROM Logistics_testdata.dbo.[order]
コードを見ればすぐに分かると思いますが、
SELECT * INTO 復元先データベース名.dbo.[テーブル名] FROM 復元元データベース名.dbo.[テーブル名]
というコードで実行すれば、テーブルの復元ができることになります。
参考
ちょっと話は反れますが、復元元のテーブル名が違くても復元(インポート)はされます。
そのテーブル名でViewなどを組んでいると勿論動きませんので注意が必要です。
私は、このテーブル名で一文字違うだけで1時間を費やしてしまいました。
何回も行ってしまいますが、
注意ポイント
バックアップしたデータベースから、テーブルだけを戻すとか、Viewやストアドなどを指定して復元する方法があるなら、こんな作業は必要ありません。
ぜひ、その方法があったら教えてほしいです。