ssis - 在SSIS包中,保持变量值

  显示原文与译文双语对照的内容

我有一个包含脚本任务的软件包。 我通过编辑剧本来扩展它。 包定期运行,我需要在变量中保存一个日期值。 值是包上次运行的时间。 软件包从 SQL Server Agent 运行。 我已经将变量放入包的配置xml中。 我想在从脚本任务运行包之后更新xml中的值。

我已经写了这样的代码


Dts.Variables["lastRunDate"].Properties["Value"].SetValue(Dts.Variables["lastRunDate"], DateTime.Now.ToString("yyyy-MM-dd");

程序运行,我不确定,第一个函数参数的正确值是什么。 文档并没有什么帮助。 脚本运行,但xml配置文件没有用新值更新。

更新:我可以将值保存到注册表。 我不确定这里的最佳实践 ! 它在 SQL Server 环境下部署和运行包的方式存在安全问题。 : (

谁能帮上忙?

时间: 作者:

由于你正在通过代理运行包,所以无法通过 msdb.dbo. sysjob%表的某些组合来提取最后的运行日期?

msdb.dbo.sysjobactivity


SELECT TOP 1 sja.start_execution_date
FROM msdb.dbo.sysjobs sj
LEFT JOIN msdb.dbo.sysjobactivity sja
 ON sj.job_id = sja.job_id
WHERE sj.name = '<Agent Job Name>'
ORDER BY sja.start_execution_date DESC;

msdb.dbo.sysjobhistory


SELECT TOP 1 run_date, run_time
FROM msdb.dbo.sysjobs sj
LEFT JOIN msdb.dbo.sysjobsteps sjs
 ON sj.job_id = sjs.job_id
LEFT JOIN msdb.dbo.sysjobhistory sjh
 ON sjs.job_id = sjh.job_id
 AND sjs.step_id = sjh.step_id
WHERE sj.name = '<Agent Job Name>'
 AND sjs.step_name = '<Job Step Name>'
ORDER BY sjh.run_date DESC, sjh.run_time DESC;

你将需要一个脚本任务来直接操作xml配置文件。 我不是xml的专家,因这里可以能有更好的方法,但我可以告诉你如何将文本追加到文件中。


Imports System.IO
Public Sub Main()

dim fileName as string
fileName ="C:somefilepathandname.dtsconfig"
File.Delete(fileName)
File.AppendAllText(fileName,"<?xml version=" & chr(34) &"1.0" & chr(34) &"?>"
File.AppendAllText(fileName,"<DTSConfiguration><DTSConfigurationHeading></DTSConfigurationHeading>")
File.AppendAllText(fileName,"<Configuration ConfiguredType=" & chr(34) &"Property" & chr(34) &" Path =" & chr(34) &"Package.Variables[User::lastRunDate].Properties[Value]" & chr(34) &"ValueType=" & chr(34) &"String" & chr(34) &">")
File.AppendAllText(fileName,"<ConfiguredValue>" & DateTime.Now.ToString("yyyy-MM-dd") &"</ConfiguredValue></Configuration></DTSConfiguration>

End Sub

作者:
...