0

目前正在尝试第一次在 SQL Server 中使用存储过程...

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

只要变量都被硬编码到脚本中,我们的存储过程就工作得很好。

我们需要做的就是将 1 个变量应用到存储过程中,但是每次我们尝试运行它时,它都会生成错误,指出标量变量 @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
4

1 回答 1

0

To simplify, as everything is hardcoded, just declare 2 more local variables of same type as your parameter base_db;

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

And when using it,

MOVE 'base_db' TO @base_db_mdf

And the same goes for the second one.

于 2013-09-02T11:17:22.140 回答