SQL Server中的sp_添加_作业步骤
我用SQL编写了以下内容:SQL Server中的sp_添加_作业步骤,sql,sql-server,Sql,Sql Server,我用SQL编写了以下内容: EXEC sp_add_jobstep @job_name = N'Every 5 minutes log backup ', @step_name = N'set T-sql command', @subsystem = N'TSQL', @command=N'DECLARE @fileName NVARCHAR(256) BACKUP LOG MM TO DISK =''F:\BackUp\Log\M-''' +dbo.UDF_Gr
EXEC sp_add_jobstep
@job_name = N'Every 5 minutes log backup ',
@step_name = N'set T-sql command',
@subsystem = N'TSQL',
@command=N'DECLARE @fileName NVARCHAR(256) BACKUP LOG MM TO DISK =''F:\BackUp\Log\M-''' +dbo.UDF_Gregorian_To_Persian_WithDash(cast(GETDATE() as date))+'''-'''+ REPLACE(cast(isnull(convert(char(5), GETDATE(), 108),'''''') as nvarchar),''':''','''''') + '''.TRN''',
@retry_attempts = 1,
@retry_interval = 1 ;
GO
但是SQL说
“不正确的语法接近+”
请帮帮我 那些使徒有点乱。你想要的是:
DISK ='F:\BackUp\Log\M-x-y.TRN'
但通过查看当前字符串,它更可能是:
DISK ='F:\BackUp\Log\M-'x'-'y'.'TRN'
因此,我希望这会更好:
@command = N'DECLARE @fileName NVARCHAR(256) BACKUP LOG MM TO DISK = ''F:\BackUp\Log\M-' + cast(dbo.UDF_Gregorian_To_Persian_WithDash(cast(GETDATE() as date)) as nvarchar) + '-' + REPLACE(cast(isnull(convert(char(5), GETDATE(), 108),'''''') as nvarchar),''':''','''''') + '.TRN'''
一个技巧是打印这一行,这样您就可以准确地看到输出结果。在我上面的示例中,输出类似于:
..DISK ='F:\BackUp\Log\M-2015-04-27-08:31.TRN'
编辑:
不确定带破折号的UDF_Gregorian_To_Persian_返回什么,但除非它是nvarchar
,否则您也需要CAST()
(使用CAST更新了我上面的示例)。您可以将变量传递到或文本值,但不允许使用的是表达式
因此,首先将字符串连接作为单独的步骤:
declare @cmd nvarchar(max)
set @cmd = 'DECLARE @fileName NVARCHAR(256) BACKUP ... ' + dbo.UDF_Gregorian_To_Persian_WithDash(...) + ' ... '
EXEC sp_add_jobstep
@job_name = N'Every 5 minutes log backup ',
@step_name = N'set T-sql command',
@subsystem = N'TSQL',
@command=@cmd,
@retry_attempts = 1,
@retry_interval = 1 ;
如果我通过@cmd,则日期和时间不是最新的,因为我需要有命名日志备份的确切日期和时间file@user2315036您可以在这里看到一个示例:(运行SQL)。查询仍将返回预期结果。您是否有任何新的错误消息?正如Damien提到的,exec将不接受表达式(doh)。不知道如何将其放入作业中,然后在其中进行分析。