目前正在尝试首次在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
答案 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
第二个也是如此。