SQLServer2005 メンテナンスプランについて
SQLServer2005の管理、メンテナンスプランについての質問です。
互換性レベル7.0で運用しているDBのバックアップタスクを作成したいと思っています。
ツールボックスから「データベースのバックアップタスク」を使用すると、対象のDBとしてリストに表示されないため、
「T-SQLの実行タスク」を作成し、ステートメントに以下のように記述しました。バックアップは正常終了するのですが。。。
-------------------クエリここから-----------------
BACKUP DATABASE [DB_NAME] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901151519.bak' WITH NOFORMAT, NOINIT, NAME = N'DB_NAME_backup_20090115151905', SKIP, REWIND, NOUNLOAD, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'DB_NAME' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'DB_NAME' )
if @backupSetId is null begin raiserror(N'確認に失敗しました。データベース ''DB_NAME'' のバックアップ情報が見つかりません。', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901151519.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
-------------------クエリここまで-----------------
ここで、問題なのは、バックアップファイル名の指定が「DB_NAME_backup_200901151519.bak」固定であることです。
実行日時を取得してファイル名を生成するため、以下のように引数の「DISK」と「NAME」を変数で指定するように変更しました。
しかし、クエリの実行をすると、メッセージに以下のエラーが出力され、実行できません。
引数の渡し方が誤っているのでしょうか?
宜しくご教授願います。
-------------------変更後クエリここから-----------------
DECLARE @TODAY VARCHAR(30);
DECLARE @YYYY VARCHAR(4);
DECLARE @MM VARCHAR(2);
DECLARE @DD VARCHAR(2);
DECLARE @HH VARCHAR(2);
DECLARE @M VARCHAR(2);
DECLARE @S VARCHAR(2);
DECLARE @DISK VARCHAR(200);
DECLARE @NAME VARCHAR(100);
set @TODAY = convert(varchar, GETDATE(), 121);
set @YYYY = SUBSTRING(@TODAY, 1, 4);
set @MM = SUBSTRING(@TODAY, 6, 2);
set @DD = SUBSTRING(@TODAY, 9, 2);
set @HH = SUBSTRING(@TODAY, 12, 2);
set @M = SUBSTRING(@TODAY, 15, 2);
set @S = SUBSTRING(@TODAY, 18, 2);
set @DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_'+@YYYY + @MM + @DD + @HH + @M +'.bak';
set @NAME = N'DB_NAME_backup_'+@YYYY + @MM + @DD + @HH + @M + @S;
print 'DISK:'+@DISK
print 'NAME:'+@NAME
BACKUP DATABASE [DB_NAME] TO DISK = @DISK WITH NOFORMAT, NOINIT, NAME = @NAME, SKIP, REWIND, NOUNLOAD, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'DB_NAME' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'DB_NAME' )
if @backupSetId is null begin raiserror(N'確認に失敗しました。データベース ''DB_NAME'' のバックアップ情報が見つかりません。', 16, 1) end
RESTORE VERIFYONLY FROM DISK = @DISK WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
-------------------変更後クエリここまで-----------------
-------------------メッセージここから-------------------
DISK:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\DB_NAME\DB_NAME_backup_200901211339.bak
NAME:DB_NAME_backup_20090121133912
メッセージ 137、レベル 15、状態 2、行 1
スカラ変数 "@DISK" を宣言してください。
メッセージ 137、レベル 15、状態 2、行 4
スカラ変数 "@DISK" を宣言してください。
-------------------メッセージここまで-------------------
以上、よろしくお願い致します。
お礼
すみません SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 +30のかっこがぬけていていました 以下のように完成できました ありがとうございました -------------------------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER FUNCTION [dbo].[scfc_part端数処理] ( @PTHASU nvarchar(10), @haken nvarchar(10) ) RETURNS real AS BEGIN DECLARE @PARTT real DECLARE @PARTT_H real if (not(@PTHASU is null)) if @haken='派遣' or @haken='臨時' begin if substring(@PTHASU,4,2)>= 50 SET @PARTT = convert(real,LEFT(@PTHASU,2)+1)*60 else IF substring(@PTHASU,4,2)< 50 and substring(@PTHASU,4,2)>= 20 SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 +30 else SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 end ELSE SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 + convert(real,substring(@PTHASU,4,2))*1 ELSE SET @PARTT= 0 SET @PARTT_H = convert(real,(floor(@PARTT/60*10000)/10000)) RETURN @PARTT_H END