2017-02-08 12 views
0

PowerShellを使用してSQL Serverインスタンスにbakファイルを復元しようとしています。SQLデータベースを復元する場合は、

スクリプトにそれを置く前に、私はちょうど

cmd.exe /C SqlCmd -E -S COMPUTER01 -Q "RESTORE DATABASE TestDB FROM DISK = N'.\TestDB.bak' WITH FILE = 1, MOVE N'TESTING' TO N'.\DataStore\TestDB.mdf', MOVE N'TESTING_log' TO N'.\LogStore\TestDB.ldf', NOUNLOAD, STATS = 5" 
プロンプトのPowerShellからコマンドを実行しようとしていた

それは私がその後、セミコロンを追加するために、私のCMDを変え

Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

エラーを投げた

cmd.exe /C SqlCmd -E -S COMPUTER01 -Q "RESTORE DATABASE TestDB FROM DISK = N'.\TestDB.bak'**;** WITH FILE = 1, MOVE N'TESTING' TO N'.\DataStore\TestDB.mdf', MOVE N'TESTING_log' TO N'.\LogStore\TestDB.ldf', NOUNLOAD, STATS = 5" 

今、エラーをスローしています:

"Incorrect syntax near ..."

誰かが私にDBが既に名前「TestDBと」それが存在する場合

  • で存在する場合
  • 復元私は

    1. チェック、DBを削除することができ、作業ピースコードをお願いできますTestDBという名前のTestDB.bak

    私はこのスクリプトをPowerShell 5で使用しており、cmd.exe /C SqlCmdのみを使用する必要はありません。もっと良い方法があれば、私もそれに適応します。

  • +1

    「cmd/c」が必要なのはなぜですか?それを削除するとどうなりますか? –

    +1

    また、あなたの質問はPowerShell v5と言い、タグはPowerShell v3と言います。どちらですか? –

    +0

    タグを編集してpowershell 3.0を削除しました。間違ったタグ付けにごめんね。 Btw私はcmd.exe/C構文が他のソリューションで使用されているのを見ました。たとえば、 http://stackoverflow.com/questions/38347095/powershell-sqlcmd-mode-error 私はpowershellからsqlcmdsを実行する方法だと思います。 –

    答えて

    1

    これはあなたが望むことをしますが、DBが存在するかどうか尋ねません。それは、コードの行をもっとたくさんかかるし、あなたがDBを削除するので、それは本当に重要な\それはとにかく書き換えます。

    $DBName="TestDB" 
    $backupFilePath="D:\TESTDB.bak" 
    $Datafilepath="D:\DataStore" #Do not add the trailing \ 
    $Logfilepath="D:\LogStore" #Do not add the trailing \ 
    $dbCommand = "use [master];RESTORE DATABASE [$DBName] " + "FROM DISK = N'$backupFilePath'" + "WITH FILE = 1, NOUNLOAD, STATS = 10, " + "move 'TESTING' to '$Datafilepath" + "\" + "$DBName" + "_data1.mdf', " + "move 'TESTING_log' to '$Logfilepath" + "\" + "$DBName" + "_log1.ldf';" + "alter database [$DBName] modify file (name=N'TESTING', newname=N'$DBName" + "_data1');" + "alter database [$DBName] modify file (name=N'TESTING_log', newname=N'$DBName" + "_log1');" + "alter database [$DBName] set read_committed_snapshot on with rollback immediate;" + "alter database [$DBName] set COMPATIBILITY_LEVEL = 100;" 
    sqlcmd -S $DBServerName -E -Q $dbCommand -r0 
    
    関連する問題