gpt4 book ai didi

sql-server - 更改sql server数据库文件位置的脚本

转载 作者:行者123 更新时间:2023-12-05 00:26:54 25 4
gpt4 key购买 nike

我需要更改实例中数据库的所有文件位置。基本上,由于当前目录的空间限制,我需要将实例移动到同一台服务器上的新位置。这些文件将全部移动到相同的新位置并且名称将保持不变。所以只是路径需要改变。 (这听起来很简单,令人沮丧的是我不能让它工作。:-))

我正在尝试使用 sp_MSForEachDB 但似乎无法获得正确的引号以在 FILENAME = parameter 的新文件位置中传递 >ALTER DATABASE 命令。

这是我目前所拥有的。

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

我得到了

Msg 102, Level 15, State 1, Line 10 Incorrect syntax near '@filename'.

这是一个开发中的数据库实例,因此启动和关闭它不是问题。我更喜欢这种方法而不是备份/恢复,因为它会在几秒钟而不是几分钟内完成。我们将来也会多次使用它,所以把它写成脚本很重要。我知道脚本中的步骤在手动发出时有效。

我只需要调试脚本的帮助,我认为这是正确引用引号的问题。在此先感谢您的帮助!

最佳答案

您必须稍微更改引号:

DECLARE @command NVARCHAR(1000)--, @filename NVARCHAR(100)

SELECT @command = '
BEGIN
DECLARE @filename nvarchar(256)
USE ?
SELECT @filename =
''F:\DevworxExtStorage\Databases\MSSQL12.DEVSQL2014\MSSQL\DATA\'' + DB_NAME() + ''.md''
END

SELECT @filename
'
exec sp_MSforeachdb @command

对字符串使用单引号,对单引号使用双单引号。

关于sql-server - 更改sql server数据库文件位置的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44138043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com