2

在 SQL Server 2008 R2 中,我通过在 SQL Server Management Studio 中右键单击服务器并设置它们来设置DataLog位置。F:\moved\

但是,当我使用sqlcmd它还原数据库时,它会还原E:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA似乎是默认 SQL Server 位置的数据库。

为了存储目的,我需要始终恢复数据库,F:\moved\但是当我在脚本中使用以下内容时,有时会出现错误:

RESTORE DATABASE $(database) FROM DISK = '$(root)\$(database).bak' WITH RECOVERY,
MOVE '$(database)' TO '$(datadir)$(database).mdf',
MOVE '$(database)_log' TO '$(datadir)$(database).ldf'
GO

错误:

将数据库上下文更改为“主”。
消息 3234,级别 16,状态 2,服务器 SQL1,第 3 行
逻辑文件 'userdb1' 不是数据库 'userdb1' 的一部分。使用 RESTORE FILELISTONLY 列出逻辑文件名。
消息 3013,级别 16,状态 1,服务器 SQL1,第 3 行
RESTORE DATABASE 异常终止。

默认情况下可以sqlcmd强制恢复F:\moved\,而不必像我上面那样手动指定它以避免错误?

4

1 回答 1

0

你不能在你的脚本中定义datadir变量吗?sqlcmd

像这样的东西:

:setvar datadir F:\moved\

RESTORE DATABASE $(database) FROM DISK = '$(root)\$(database).bak' WITH RECOVERY,
MOVE '$(database)' TO '$(datadir)$(database).mdf',
MOVE '$(database)_log' TO '$(datadir)$(database).ldf'
GO

有了该行,sqlcmd应始终使用该目录(而不是 SQL Server 默认值)

或者您也可以在命令行调用时将该变量值设置为您想要的任何值sqlcmd

C:\> sqlcmd -v datadir=F:\moved\ (script name)
于 2012-04-30T10:35:47.720 回答