2014-01-15 4 views
2

У меня есть пакет, содержащий задачу скрипта. Я увеличиваю его, редактируя скрипт. Пакет запускается периодически, и мне нужно сохранить значение даты в переменной. Значение - последний раз, когда пакет был запущен. Пакет запускается из агента SQL-сервера. Я поместил переменную в конфигурацию xml для пакета. Я хочу обновить значение в xml, как только мой пакет будет запущен из задачи сценария.Сохранять значение переменной в пакете SSIS

Я написал код, как этот

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

работает программа, я просто не уверен, что это правильное значение первого параметра SetValue функции. документация не очень помогает. Скрипт выполняется, но файл конфигурации xml не обновляется с новым значением.

Обновление: я могу сохранить значение в реестре. Я не уверен в лучшей практике здесь! У него есть проблемы с безопасностью, связанные с развертыванием и запуском пакетов под SQL-сервером. :(

Может кто-нибудь, пожалуйста, помогите с этим?

+0

Почему бы не сохранить это значение в "истории" таблицы? –

+0

Это лучшая практика? сделать так? Я просто не хочу помещать дополнительную таблицу в базу данных для правильной работы пакета. Это просто другая зависимость от пакета. – CodeWeed

+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; 
+0

Это поможет. Благодарю. Надеюсь, кто-то отправит простой способ сохранить значения переменных между прогонами. – CodeWeed

+3

Преимущества SSIS сильно отличаются от возможности использования табличных подходов. Нежелание добавлять таблицу может быть актуальной проблемой, но я не могу выразить с достаточной ревностью, насколько невероятно полезно создавать небольшую схему для отслеживания моих процессов ETL. С такой структурой вы можете записывать время, параметры, результаты и все остальное, что вы можете выяснить, как извлечь из запуска SSIS, а затем быстро устранить неполадки и автоматизировать мониторинг, который был бы в противном случае слишком громоздким. Помните, что SSIS является инструментом базы данных и должен использоваться _with_ в базе данных для максимального эффекта! – Avarkx

+0

@Avarkx за исключением случаев, когда вы фактически интегрируете некоторые веб-сервисы и не обязательно SQL Server. –

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 
+1

Человек !!! это ужасно !!! – CodeWeed

+0

@CodeWeed Не могли бы вы помочь мне понять, почему это ужасно? Не будет ли это касаться вашей ситуации (если вы используете XML-конфигурацию)? – billinkc

+0

Я никогда не говорил, что это не грязный хак. Он справляется с ситуацией, не так ли? – RubberDuck

Смежные вопросы