大力,请帮我解答!

meng___xuan 2003-09-15 11:45:13
@command = ‘BACKUP DATABASE [Test] TO DISK.......‘
我是这样的,备份的路径用户可以设置,但是备份的文件名不能有用户设置,文件名是备份时的时间名。
还有,我在进行完全备份和差异备份的时间同时进行可以吗?谢谢!
...全文
49 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
meng___xuan 2003-09-15
  • 打赏
  • 举报
回复
可是我编译不能通过,调试后,总是提示+号语法错误。我的代码是:
use msdb

BEGIN TRANSACTION
DECLARE @JobID BINARY(16)
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
DECLARE @myBak varchar(50)
DECLARE @dbname varchar(250)
DECLARE @sql varchar(8000)
DECLARE @path varchar(100)
SET @dbname='test' --要备份的数据库名
SET @path='c:' --用户设置的备份路径
--set @sql='backup database ['+@dbname+'] to disk='''+@path+@dbname+convert(varchar,getdate(),102)+'.bak''''
--exec(@sql)
IF (SELECT COUNT(*) FROM syscategories WHERE name = N'[Uncategorized (Local)]') < 1
EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'

-- — 删除同名的警报(如果有的话)。
SELECT @JobID = job_id
FROM msdb.dbo.sysjobs WHERE (name = N'Test 备份')
IF (@JobID IS NOT NULL)
BEGIN
-- 检查此作业是否为多重服务器作业
IF (EXISTS (SELECT *
FROM msdb.dbo.sysjobservers
WHERE (job_id = @JobID) AND (server_id <> 0)))
BEGIN
-- 已经存在,因而终止脚本
RAISERROR (N'无法导入作业“Test 备份”,因为已经有相同名称的多重服务器作业。', 16, 1)
GOTO QuitWithRollback
END
ELSE
-- 删除[本地]作业
EXECUTE msdb.dbo.sp_delete_job @job_name = N'Test 备份'
SELECT @JobID = NULL
END

BEGIN

-- — 添加作业
EXECUTE @ReturnCode = sp_add_job @job_id = @JobID OUTPUT , @job_name = N'Test 备份'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- — 添加作业步骤
EXECUTE @ReturnCode = sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'第 1 步',
@command = 'BACKUP DATABASE ['+@dbname+'] TO DISK='+@path+'\'
+'dat'--备份文件需要使用字母开头
+convert(varchar(4),datepart(day,getdate()))+'.bak',
@subsystem = N'TSQL', @retry_attempts = 5, @retry_interval = 5'',
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

-- — 添加作业调度
EXECUTE @ReturnCode = sp_add_jobschedule @job_id = @JobID, @name = N'第 1 调度', @freq_type = 4,
@active_start_date = 20030915, @active_start_time = 132100, @freq_interval = 26
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback


--— 添加目标服务器
EXECUTE @ReturnCode = sp_add_jobserver @job_id = @JobID
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

莫名的错误,郁闷。
meng___xuan 2003-09-15
  • 打赏
  • 举报
回复
谢谢!你的帮助,想你学习!
lionstar 2003-09-15
  • 打赏
  • 举报
回复
你也可以使用存储过程,输入参数是用户指定的路径。然后
@command = ‘BACKUP DATABASE [Test] TO DISK='+@path+'\'
+'dat'--备份文件需要使用字母开头
+convert(varchar(4),datepart(day,getdate()))+'.bak'
Exec(@command)
祝你好运
lionstar 2003-09-15
  • 打赏
  • 举报
回复
建立一个表,存放用户指定的路径
select @Path=UserPath from 存放路径表
@command = ‘BACKUP DATABASE [Test] TO DISK='+@path+'\'
+'dat'--备份文件需要使用字母开头
+convert(varchar(4),datepart(day,getdate()))+'.bak'

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧