我需要更改实例中数据库的所有文件位置。基本上,由于当前目录的空间限制,我需要将实例移动到同一服务器上的新位置。文件将全部移动到相同的新位置,并且名称将保持不变。因此,只需要更改路径。(听起来很简单,但我无法让它工作,这真是令人沮丧。:-) )
我正在尝试使用sp_MSForEachDB,但似乎无法正确使用引号将新文件位置传递到ALTER DATABASE命令的FILENAME =参数中。
以下是我目前拥有的:
我正在尝试使用sp_MSForEachDB,但似乎无法正确使用引号将新文件位置传递到ALTER DATABASE命令的FILENAME =参数中。
以下是我目前拥有的:
DECLARE @command NVARCHAR(1000)--, @filename NVARCHAR(100)
SELECT @command = '
BEGIN
DECLARE @filename nvarchar(100)
USE ?
SELECT @filename =
"F:\DevworxExtStorage\Databases\MSSQL12.DEVSQL2014\MSSQL\DATA\" + ? + ".mdf"
ALTER DATABASE ? MODIFY FILE ( NAME = ?, FILENAME =
"F:\DevworxExtStorage\Databases\MSSQL12.DEVSQL2014\MSSQL\DATA\")
SELECT @filename =
"F:\DevworxExtStorage\Databases\MSSQL12.DEVSQL2014\MSSQL\DATA\" + ? + "_log.ldf"
ALTER DATABASE ?_log MODIFY FILE ( NAME = ?, FILENAME = @filename)
END'
exec sp_MSforeachdb @command
SELECT @command = 'ALTER DATABASE ? SET offline'
exec sp_MSforeachdb @command
我遇到了问题:
错误消息102,级别15,状态1,第10行“@filename”附近的语法不正确。
这是一个开发数据库实例,因此升起和关闭它并不是问题。我更喜欢这个方法,而不是备份/恢复,因为它只需要几秒钟就可以完成,而不是几分钟。 我们将来还会多次使用它,因此将其制作成脚本非常重要。我知道手动执行脚本的步骤是有效的。
我只需要帮助调试脚本,我认为这可能是引号出现问题的原因。提前感谢您的任何帮助!