Sql-Server

如何自動更改作業執行的 ssis 包中的參數?

  • June 7, 2019

我有一個執行具有特定參數的包的工作,如下圖所示:

在此處輸入圖像描述

我想將這些參數(黃色的 2 個日期)設置為1900-01-01而不是2019-02-27.

我需要這樣做,automate因為我有一些要更新的軟體包。

我怎樣才能通過腳本完成這項工作?

我一直這樣做的方式是首先使用以下查詢獲取job_id和作業命令:

select @@servername -- this should be on the same server as the job
exec  msdb.dbo.sp_help_job @job_name = 'Daily DW CA'

即獲取具有您要更新的命令的job_idstep_id

您還可以像這樣獲取該資訊:

請注意,這也可以是自動化的,但在這種情況下沒有必要。

select * from
msdb.dbo.sysjobs
where name ='Daily DW CA'

然後在下面的腳本中使用@job_idand step_id。下面的腳本會將日期從 更改2019-02-271900-01-01

set nocount on

declare @job_id uniqueidentifier = '90D3F4A2-1AC7-4741-BCCA-9A7B64A69B20'
declare @step_id int = 1
declare @command NVARCHAR(MAX)
declare @sql NVARCHAR(MAX)


--a quick select just to check
   SELECT step_id,
          step_name,
          subsystem,
          command,
          output_file_name,
          proxy_id
   FROM msdb.dbo.sysjobsteps
   WHERE (job_id = @job_id)
     AND ((@step_id IS NULL) OR (step_id = @step_id))
   ORDER BY job_id, step_id

--REPLACE(string, old_string, new_string)

   SELECT @COMMAND = replace(command,'2019-02-27','1900-01-01')
   FROM msdb.dbo.sysjobsteps
   WHERE (job_id = @job_id)
     AND ((@step_id IS NULL) OR (step_id = @step_id))
   ORDER BY job_id, step_id

print @command

SET @SQL =
'
EXEC msdb.dbo.sp_update_jobstep 
@job_id=N''' +  '90d3f4a2-1ac7-4741-bcca-9a7b64a69b20' + ''',' + '
@step_id=1 , ' +
'@command=N''' + @command + '' + char(39) 

print @sql

exec sp_executesql @sql

您可以通過查看以下命令來檢查是否一切正常:

exec  msdb.dbo.sp_help_job @job_name = 'Daily DW CA'

您可以在如下所示的命令中看到所需的值: 在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/240088