データベースの名前を変更できる 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 ボックスではなく、リモートで実行されます。