0

データベースの名前を変更できる PowerShell 関数を作成しています。

これは非常にうまく機能しています:

    $sqlServer = "MySqlServer"
    $currentDbName = "MyDB"
    $sqlConnectionString = "Server='$sqlserver';Database='$currentDbName';Integrated Security=True"
    $sqlQueries = `
        "ALTER DATABASE [$currentDbName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE",`
        "EXEC sp_renamedb '$currentDbName', '$NewName'",`
        "ALTER DATABASE [$NewName] SET MULTI_USER", `
        "ALTER DATABASE [$NewName] MODIFY FILE (NAME = $currentDbName, NEWNAME = $NewName)", `
        "ALTER DATABASE [$NewName] MODIFY FILE (NAME = $($currentDbName)_Log, NEWNAME = $($NewName)_Log)"
    $conn=new-object System.Data.SqlClient.SQLConnection($sqlConnectionString)
    try {
        $conn.Open()
        $sqlQueries | % {
            $cmd = $conn.CreateCommand()
            $cmd.CommandText = $_
            $cmd.ExecuteScalar()
            Write-Host "    Executed: $_" -ForegroundColor Gray
        }
    }
    catch{
        $actualError = $error[0]

        throw $actualError
    }
    finally{
        if($conn) {
            $conn.Close()
            $conn.Dispose()
        }
    }

このスクリプトは、データベースとデータファイルの名前を変更します (データファイルが 1 つしかない場合)。

ただし、このスクリプトはファイルの物理名を変更せず、複数のデータ ファイルの名前変更をサポートしていません。

データベースの物理ファイルの名前も変更するにはどうすればよいですか?

データベース スキーマは私の管理下にないことに注意してください。DB にストアド プロシージャを追加することはできません。

[編集]スクリプトは、SQL Server ボックスではなく、リモートで実行されます。

4

1 に答える 1