复制数据库时存储Proc问题

时间:2013-09-02 11:05:35

标签: sql tsql stored-procedures sql-server-2012

目前正在尝试首次在SQL Server中使用storedproc ...

现在我们有一个简单的存储过程,它创建了一个我们将用于CMS安装的数据库副本。

如果变量全部硬编码到脚本中,我们的存储过程工作得很好。

我们需要做的就是将1个变量应用到storedproc中,但每当我们尝试运行它时,它会生成错误,指出标量变量@dsource未定义。

我也不太确定如何将变量作为存储过程中字符串的一部分应用,所以任何帮助都非常感激

基本上我们需要定义@dsource参数并在字符串中使用它,这样我们就可以用这个特定的变量来改变所需的目录路径。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      
-- Create date: 
-- Description: 
-- =============================================
CREATE PROCEDURE one_installer
    -- Add the parameters for the stored procedure here
     @dsource
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
BACKUP DATABASE base_db 
     TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\base_db.bak' WITH FORMAT
RESTORE FILELISTONLY FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\base_db.bak'
RESTORE DATABASE @dsource 
   FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\base_db.bak'
   WITH 
   MOVE 'base_db' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\' dsource '.mdf',
   MOVE 'base_db_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\'  dsource  '_log.ldf'
END
GO

1 个答案:

答案 0 :(得分:0)

为了简化,因为所有内容都是硬编码的,只需要声明2个与参数base_db相同类型的局部变量;

DECLARE @base_db_add(VARCHAR(500));
SET @base_db_mdf = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\' +   @dsource + '.mdf' ;

使用时,

MOVE 'base_db' TO @base_db_mdf

第二个也是如此。