- PR -

SQLServer2000のストアドでバックアップ

1
投稿者投稿内容
GOLF@スポコン
常連さん
会議室デビュー日: 2003/11/26
投稿数: 30
投稿日時: 2003-12-11 09:49
いつもお世話になります。

現在、SQLServer2000のストアドでDBのバックアップをととうとおもっているのですが、うまくいきません。

環境はVB6(SP5)、SQLServer2000です。

VB側から、「DB名」、「デバイス名」を渡して、バックアップを取りたいのです。

■ストアド
/************************ STR ************************/
CREATE PROCEDURE TEST (

/*----- パラメータ str -----*/
@Database_Name VARCHAR(20),
@Device_Name VARCHAR(20),
@PM_strFormatFlg VARCHAR(1)
/*----- パラメータ end -----*/
)AS

/*------- 変数 str ---------*/
declare
@err_code int
/*------- 変数 end ---------*/

if @PM_strFormatFlg = '0'
BACKUP DATABASE [@Database_Name] TO [@Device_Name] WITH FORMAT, NOUNLOAD , NAME = N'バックアップ', STATS = 10
else
BACKUP DATABASE [@Database_Name] TO [@Device_Name] WITH NOFORMAT, NOINIT , NOUNLOAD , NAME = N'バックアップ', NOSKIP , STATS = 10
end

select @err_code = @@error

if @err_code <> 0
begin
goto err_step

end

return (0)

err_step:
return (@err_code)
GO

/************************ END ************************/

です。

クエリアナライザーから
Execute 'testdb', 'datdump', 1
見たいな感じで実行すると下記のようなエラーが返ってきました。

/************************ ERR ************************/
sysdevicesにバックアップデバイス '@Device_Name'のエントリがありません。
sysdevicesを更新、ステートメントを実行してください。
/************************ ERR ************************/

どうも、「DB名」、「デバイス名」を引数にすると、エラーになるようです。
(リテラルで記述すると、うまいこと実行できました。)

変数の使い方が間違っているのでしょうか?

ご指摘よろしくお願いします。

後、リテラルで書いた場合、動くのですが、
IF文で、フォーマットするかしないかを判断しているのですが、
わざと、容量がたりないDISKでフォーマットする方で実行した場合、
「容量がたりません。」とエラーになります。
フォーマットするのに容量が足りないとできないのでしょうか。
それとも、構文が間違っているのでようか?

インターネットで調べたのですが、
この手の物があんまりありません。ヘルプ通りにやっているのですが、
うまくいきません。

よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)