2017-07-31 90 views
0

我研究了这一点,我知道这里也有类似的问题。但是,似乎没有足够的帮助来解决我的问题。作业输出不断覆盖本身

首先,我对SQL很有经验,但是我们最近收购了两个实习生。他们现在已经和我们在一个星期了,他们为阅读代码而苦恼,所以我想保持这个(他们任务组的一部分)尽可能简单。

基本上,下面的代码是一个更大的存储过程的一部分,它在早上每天都作为一个工作运行。它应该保存在名为GoodsIN的指定文件夹中作为xlsx。但是,每天都会覆盖自己,而不是生成新的XLSX文件。

@database_name=N'master', 
@output_file_name=N'E:\goodsindata\Goodsin.xlsx', 
@flags=0 
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 
1 
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @[email protected], @name=N'Daily 
0900', 

如果有人可以帮助,我真的很感激它,因为提到我们有实习生在如此理想,这将是容易读越好(最初,我想通过电子邮件发送出去,但是那是有点太先进为他们)我会让他们在夏天结束前阅读SQL!

感谢一如既往家伙,

+0

嘛....输出文件的名称是硬编码和静态的。每次运行时都会覆盖它。处理这种情况的最常见方式是使用当前日期时间作为文件名的一部分。 –

+0

伟大的建议肖恩兰格。谢谢! – JWain

回答

1

追加日期(或其他一些独特的字符串)或将连续覆盖该文件。

@database_name=N'master', 
@output_file_name=N'E:\Rebekah\PaidClaims' + convert(varchar(10),getdate(),110) + '.xlsx', 
@flags=0 
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 
1 
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @[email protected]obId, @name=N'Daily 
0900', 

这将产生:E:\Rebekah\PaidClaims07-31-2017.xlsx

Here are some other date conversion codes.