我在SQL Server 2008 R2的数据库,我创建了恢复数据库此存储过程:还原存储过程
CREATE PROCEDURE [dbo].[usp_DBRestore]
@DBName nvarchar(60)
,@BackName nvarchar(120)
,@OutMessage nvarchar(4000) output
--,
[email protected] varchar(60),
[email protected] varchar(120),
[email protected] varchar(60),
[email protected] varchar(120)
AS
BEGIN TRY
USE [master]
ALTER DATABASE @DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE @DBName FROM
DISK = @BackName WITH
FILE = 1, NOUNLOAD,
REPLACE,
PASSWORD = 'TEST'
SET @OutMessage = 'OK';
ALTER DATABASE @DBName SET MULTI_USER WITH ROLLBACK IMMEDIATE
END TRY
BEGIN CATCH
ALTER DATABASE @DBName SET MULTI_USER WITH ROLLBACK IMMEDIATE
INSERT [dbo].[ErrorLog]
(
[UserName],
[ErrorNumber],
[ErrorSeverity],
[ErrorState],
[ErrorProcedure],
[ErrorLine],
[ErrorMessage]
)
VALUES(
CONVERT(sysname, CURRENT_USER),
ERROR_NUMBER(),
ERROR_SEVERITY(),
ERROR_STATE(),
ERROR_PROCEDURE(),
ERROR_LINE(),
ERROR_MESSAGE()
)
END CATCH
当我执行的代码,我看到这个错误:
一个USE数据库声明不允许在程序,函数或触发器中使用。
我该如何解决这个错误?
**不要在您的存储过程中拥有'USE ...'......这实际上只是**解决方案。为什么在存储过程中需要这个?你不能把它作为一个独立的查询吗? (这就是我所做的) – 2012-08-06 09:38:56
即使你的数据库中没有'USE master',这个'ALTER DATABASE @ DBName'也不起作用,因为你不能指定数据库名作为参数。 .. – 2012-08-06 09:40:13