在目录中执行 SSIS 包后如何读取变量值?
How to read variables values after execute a SSIS package in the Calalog?
我正在尝试从存储过程执行 SSIS 包,我想获取 SSIS 包中定义的变量的值。我可以执行 tha 包,但我不知道如何在执行后获取变量的值
我是这样执行包的:
-- Create the execution object
DECLARE @execution_id BIGINT
EXEC [SSISDB].[catalog].[create_execution]
@package_name=N'package.dtsx'
, @project_name=N'my_project'
, @folder_name=N'packages'
, @use32bitruntime=False
, @reference_id=NULL
, @execution_id=@execution_id OUTPUT
-- System parameters
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@execution_id
, @object_type = 50 -- System parameter
, @parameter_name = N'SYNCHRONIZED'
, @parameter_value = 1
DECLARE @PATH AS VARCHAR(100)
SET @PATH='c:\results\test.xlsx'
EXEC [SSISDB].[catalog].[set_execution_property_override_value]
@execution_id = @execution_id,
@property_path = '\package.Variables[User::FILE_PATH].Properties[Value]',
@property_value = @PATH,
@sensitive = 0;
-- Execute the package
EXEC [SSISDB].[catalog].[start_execution] @execution_id
-- Check package status, and fail script if the package failed
IF 7 <> (SELECT [status] FROM [SSISDB].[catalog].[executions] WHERE execution_id = @execution_id)
RAISERROR('The package failed. Check the SSIS catalog logs for more information', 16, 1)
我的包将一个值写入一个名为 ID 的变量,我需要获取该值。有办法吗?
如果这是我需要经常处理的事情,我会创建一个自定义 table。像这样
CREATE TABLE dbo.PackageRunLog
(
PackageControlSK int IDENTITY(1, 1) NOT NULL
, PackageName varchar(100) NOT NULL
, PackageID uniqueidentifier NOT NULL
, ExecutionID bigint NULL
, MyCustomVariable int
};
作为包的最后一步,执行 SQL 任务插入 table。
INSERT INTO dbo.PackageRunLog VALUES (?, ?, ?, ?);
在参数部分,使用以下 SSIS 变量
- 系统::包名称
- 系统::包ID
- System::ServerExecutionID
- 用户::我的变量
前两个记录包的友好名称,第二个是与您的包关联的内部 guid。如果有人有一个与您的包 LoadData 匹配的通用命名包 LoadData,这将很有帮助。或者如果包名称发生变化,无论如何。
神奇的是System::ServerExecutionID这个值是execution_id/operation_id记录在SSISDB.catalog.operations,catalog.operation_messages等
最后,我们将 SSIS 变量 MyVariable 映射到其中。
我的实际 运行 日志有 start/stop 日期,insert/update/delete 算在内,但这是一般模式。
我的 Lazy 方法是在脚本任务中触发信息事件,然后从 ssisdb 中解析结果值。catalog.operation_messages
我正在尝试从存储过程执行 SSIS 包,我想获取 SSIS 包中定义的变量的值。我可以执行 tha 包,但我不知道如何在执行后获取变量的值
我是这样执行包的:
-- Create the execution object
DECLARE @execution_id BIGINT
EXEC [SSISDB].[catalog].[create_execution]
@package_name=N'package.dtsx'
, @project_name=N'my_project'
, @folder_name=N'packages'
, @use32bitruntime=False
, @reference_id=NULL
, @execution_id=@execution_id OUTPUT
-- System parameters
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@execution_id
, @object_type = 50 -- System parameter
, @parameter_name = N'SYNCHRONIZED'
, @parameter_value = 1
DECLARE @PATH AS VARCHAR(100)
SET @PATH='c:\results\test.xlsx'
EXEC [SSISDB].[catalog].[set_execution_property_override_value]
@execution_id = @execution_id,
@property_path = '\package.Variables[User::FILE_PATH].Properties[Value]',
@property_value = @PATH,
@sensitive = 0;
-- Execute the package
EXEC [SSISDB].[catalog].[start_execution] @execution_id
-- Check package status, and fail script if the package failed
IF 7 <> (SELECT [status] FROM [SSISDB].[catalog].[executions] WHERE execution_id = @execution_id)
RAISERROR('The package failed. Check the SSIS catalog logs for more information', 16, 1)
我的包将一个值写入一个名为 ID 的变量,我需要获取该值。有办法吗?
如果这是我需要经常处理的事情,我会创建一个自定义 table。像这样
CREATE TABLE dbo.PackageRunLog
(
PackageControlSK int IDENTITY(1, 1) NOT NULL
, PackageName varchar(100) NOT NULL
, PackageID uniqueidentifier NOT NULL
, ExecutionID bigint NULL
, MyCustomVariable int
};
作为包的最后一步,执行 SQL 任务插入 table。
INSERT INTO dbo.PackageRunLog VALUES (?, ?, ?, ?);
在参数部分,使用以下 SSIS 变量
- 系统::包名称
- 系统::包ID
- System::ServerExecutionID
- 用户::我的变量
前两个记录包的友好名称,第二个是与您的包关联的内部 guid。如果有人有一个与您的包 LoadData 匹配的通用命名包 LoadData,这将很有帮助。或者如果包名称发生变化,无论如何。
神奇的是System::ServerExecutionID这个值是execution_id/operation_id记录在SSISDB.catalog.operations,catalog.operation_messages等
最后,我们将 SSIS 变量 MyVariable 映射到其中。
我的实际 运行 日志有 start/stop 日期,insert/update/delete 算在内,但这是一般模式。
我的 Lazy 方法是在脚本任务中触发信息事件,然后从 ssisdb 中解析结果值。catalog.operation_messages