我有一个包含脚本任务的包。我通过编辑脚本来扩展它。 包定期运行,我需要在变量中保留日期值。该值是程序包的最后运行时间。该程序包从SQL Server代理程序运行。我已将变量放在包的配置xml中。我想从脚本任务运行我的包后更新xml中的值。
我已经编写了这样的代码
Dts.Variables["lastRunDate"].Properties["Value"].SetValue(Dts.Variables["lastRunDate"], DateTime.Now.ToString("yyyy-MM-dd");
程序运行,我只是不确定,SetValue函数的第一个参数的正确值是什么。文档没有多大帮助。脚本运行但xml配置文件未使用新值更新。
更新:我可以将值保存到注册表中。我不确定这里的最佳做法!它在SQL服务器下部署和运行包的方式存在安全问题。 :(
有人可以帮忙吗?
答案 0 :(得分:1)
由于您是通过代理程序运行程序包,因此无法通过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;
答案 1 :(得分:0)
您需要一个脚本任务来直接操作xml配置文件。我不是xml的大师,所以可能有更好的方法,但我可以告诉你如何将文本附加到文件,所以缺少更好的解决方案,你可以用Visual Basic做到这一点。
Imports System.IO
Public Sub Main()
dim fileName as string
fileName = "C:\some\file\path\and\name.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