在参数

时间:2017-10-10 07:04:33

标签: sql-server tsql

我想使用bak文件和Lite速度的存储过程在SQL Server 2008 R2中恢复数据库。以下是我的代码:

USE Master
Go 
exec master.dbo.XP_RESTORE_DATABASE
@database="abc"
,@filename='M:\BACKUPS\xyz.bak'
,@WITH= 'REPLACE'
,@WITH= 'MOVE' "abc_DATA" TO "H:\SQLDATA\ABC.mdf"'
,@WITH= 'MOVE' "abc_LOG" TO "H:\SQLDATA\ABC.ldf"'
GO

执行上述查询后,我得到以下错误:

' abc_DATA'附近的语法不正确。

我不知道为什么我会收到此错误,因为我总是使用此查询来恢复数据库。

2 个答案:

答案 0 :(得分:1)

这应该有效:

RESTORE DATABASE [abc]
FROM DISK = [DiskLocation]
WITH MOVE 'abc_data' TO ' H:\SQLDATA\ABC.mdf'
,MOVE 'abc_log' TO 'H:\SQLDATA\ABC.ldf'

答案 1 :(得分:0)

XP_RESTORE_DATABASE不是SQL Server程序。它是Quest的LiteSpeed产品的一部分。 xp_restore_database的文档为here

其次,该消息解释了什么是错误的。电话不正确。传递给@WITH参数的字符串值在MOVE之后立即终止,后跟对象标识符 "abc_DATA"

电话应该是:

exec master.dbo.XP_RESTORE_DATABASE @database="abc", @filename='M:\BACKUPS\xyz.bak'
        ,@WITH= 'REPLACE'
        ,@WITH= 'MOVE "abc_DATA" TO "H:\SQLDATA\ABC.mdf"'
        ,@WITH= 'MOVE "abc_LOG" TO "H:\SQLDATA\ABC.ldf"'

您会注意到语法着色现在将整个字符串描绘为红色。