我正在创建一个可以重命名数据库的 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()
}
}
此脚本重命名数据库和数据文件(假设只有一个数据文件)。
但此脚本不重命名文件的物理名称,也不支持重命名多个数据文件。
怎么还能重命名数据库的物理文件?
请注意,数据库架构不在我的控制范围内,我无法在数据库中添加存储过程。
[编辑]脚本远程运行,而不是在 SQL Server 框中。