ssis作业,在作业步骤中传递值

h7wcgrx3  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(233)

我有一个具有多个步骤的ssis作业,每个步骤都来自不同的包或项目。当我执行作业时,我用一个guid在db中写入日志,但是每个guid都是在它的包或项目中创建的。我需要为所有步骤更新相同的值,将所有步骤与一个值/id链接在一起。有什么建议吗?

ntjbwcob

ntjbwcob1#

sql代理作业不允许将值传入作业步骤。
但是,您可以重新考虑当前如何调用ssis包来实现您的目标。
如果在sql代理作业中添加了一个前体步骤呢?sql任务的类型,并使用该类型生成希望包共享的guid。将其存储到一个单行表中,或创建一个键/值样式的历史表。

CREATE TABLE dbo.CorrelateAgentToSSIS
( 
    jobid uniqueidentifier NOT NULL
,   runid uniqueidentifier NOT NULL
,   insert_date datetime NOT NULL CONSTRAINT DF__CorrelateAgentToSSIS__insert_date DEFAULT (GETDATE())
);

有4列。第一个是SQLServer代理示例生成的guid。第二列是跟踪guid。
第0步看起来像

declare @jobid uniqueidentifier =  CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID)))
-- Populate this however it needs to be done
,    @myguid uniqueidentifier = newid()

ssis的作业步骤将发生一些变化。不使用本机ssis jobstep类型,而是使用tsql类型并执行类似操作。

DECLARE @execution_id bigint
, @jobid uniqueidentifier = CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID)));
DECLARE  @runid uniqueidentifier = (SELECT TOP 1 runid FROM dbo.CorrelateAgentToSSIS AS CATS WHERE CATS.jobid = @jobid);

EXEC SSISDB.catalog.create_execution
    @package_name = N'SomePackage.dtsx'
,   @execution_id = @execution_id OUTPUT
,   @folder_name = N'MyFolder'
,   @project_name = N'MyProject'
,   @use32bitruntime = False
,   @reference_id = NULL;

-- ddl left as exercise to the reader
INSERT INTO dbo.RunToSSIS
SELECT
    @run
,   @execution_id;

DECLARE @var0 smallint = 1;

EXEC SSISDB.catalog.set_execution_parameter_value
    @execution_id
,   @object_type = 50
,   @parameter_name = N'LOGGING_LEVEL'
,   @parameter_value = @var0;

-- This assumes you have a parameter defined in SSIS packages to receive the 
-- runid guid
EXEC SSISDB.catalog.set_execution_parameter_value
    @execution_id
,   @object_type = 50
,   @parameter_name = N'RUN_ID'
,   @parameter_value = @runid;

EXEC SSISDB.catalog.start_execution
    @execution_id;
GO

最后,在收集度量时,您可能还需要考虑将作业运行链接到包在ssisdb中收集的数据。您可以通过将jobid/runid记录到一个bigint of execution\u id来弥补这个差距 ServerExecutionID . 我在每个包的第一步都使用executesql任务来完成这个任务。在从vs运行的包中,值为0。否则,它就是您在ssisdb.catalog.operations中看到的值了解这三件事将允许您查看代理作业的工作方式、将其与自定义guid关联以及收集的任何度量,并且您可以从ssis目录中提取性能数据。
https://dba.stackexchange.com/questions/13347/get-job-id-or-job-name-from-within-executing-jobhttpshttp://dba.stackexchange.com/questions/38808/relating-executioninstanceguid-to-the-ssisdb

相关问题