[英]Dynamically executing multiple packages using execute package task in SSIS
我正在嘗試動態執行幾個程序包。
我在數據庫中有一個表,用於存儲包名稱,每個表都有一個指示符,表示為“是/否”。 我的最終目標是執行帶有指標“ Y”的那些。
我正在創建一個變量,該變量采用指示器“ Y”下的所有軟件包名稱。
我為每個放置了執行包任務的循環容器使用。 我在每個循環中分配一個ADO枚舉數,並將變量分配給ADO對象源變量。
有沒有一種方法可以在“執行包”任務中使用屬性表達式,通過相同的解決方案,我可以通過該變量分配包名稱並動態執行必要的包(子包)?
是的-我對這個問題的看法有所不同。 這將調用SQL Agent作業-作業的名稱作為變量傳遞-該變量將由FOR ... LOOP填充。
sysjobactivity
來檢測它何時實際運行以及何時完成。 sysjobhistory
查找最新條目以查看狀態(執行停止后,該條目僅寫入該表-如果我們立即進行檢查,我們將獲得最新的已知狀態) 為了使此工作正常進行,您必須確信自己是唯一可能執行此工作的用戶-否則您可能會得到別人的歷史記錄!
運行作業的用戶需要MSDB中的SQLAGENTOPERATORROLE。
SET NOCOUNT ON;
DECLARE @job_name VARCHAR(100) = 'YOU_JOB_NAME_HERE'
EXEC msdb.dbo.sp_start_job @job_name = @job_name
WHILE EXISTS(
SELECT 1 FROM msdb.dbo.sysjobs_view job
INNER JOIN msdb.dbo.sysjobactivity activity ON job.job_id = activity.job_id
INNER JOIN msdb.dbo.syssessions sess ON sess.session_id = activity.session_id
INNER JOIN (SELECT MAX(agent_start_date) AS max_agent_start_date FROM msdb.dbo.syssessions) sess_max ON sess.agent_start_date = sess_max.max_agent_start_date
WHERE job.name = @job_name AND run_requested_date IS NOT NULL AND stop_execution_date IS NULL
)
BEGIN
PRINT 'Running'
WAITFOR DELAY '00:00:01'
END
PRINT 'Finished'
SELECT TOP 1 HIST.run_status
-- 0=Failed, 1=Succeeded 2=Retry 3=Cancelled
FROM msdb.dbo.sysjobs JOB
INNER JOIN msdb.dbo.sysjobhistory HIST ON HIST.job_id = JOB.job_id
WHERE JOB.name = @job_name
ORDER BY HIST.run_date, HIST.run_time
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.