0

現在、SQL Serverで初めてstoredprocを使用しようとしています...

現在、CMS のインストールに使用するデータベースのコピーを作成する単純なストアド プロシージャがあります。

変数がすべてスクリプトにハードコードされていれば、ストアド プロシージャは非常にうまく機能しています。

必要なことは、storedproc に 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

簡単にするために、すべてがハードコーディングされているため、パラメーター base_db と同じ型のローカル変数を 2 つ宣言するだけです。

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

そして、同じことが2番目のものにも当てはまります。

于 2013-09-02T11:17:22.140 に答える