【问题标题】:Handling logging of task name using SSIS使用 SSIS 处理任务名称的日志记录
【发布时间】:2017-07-25 08:05:30
【问题描述】:

我创建了一个 SSIS 包,并有一个在序列容器中运行的任务列表。我需要记录一个包的执行开始和结束。例如 xyz 包已经启动。 xyz 包已完成。

我正在登录的日志表具有以下列,即消息和方法名。我需要在此参数中传递消息,方法名称将包含任务的名称。但是在消息中,我也希望有任务名称。如上所述,XYz 任务已经开始。

我的包裹中有大约 20 个任务。我知道需要在每个任务的 postexecute 和 preexecute 事件中创建一个执行 sql 任务。我需要知道的是在消息列中提供任务名称的最佳方法。我是否需要为所有 20 个任务创建一个变量并对值进行硬编码。如果我采用这种方法,我需要创建 40 个变量,因为 20 个用于消息任务已经开始,20 个用于任务已经结束。

存储过程

Create PROCEDURE [dbo].[InsertLog] 
    @message varchar(max),
    @methodName varchar(50),
    @errorCode varchar(25) 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    insert into CoreAnalytics.dbo.logs ([TimeStamp],LogLevelId,[Message],UserName,MethodName,LineNumber,ModelId)
      values( GetDate(),3,@errorCode + ' ' + @message,'xxxxxx',@methodName,0,'xxxxxxxx')
END

变量参数映射

错误

根据建议进行映射

【问题讨论】:

  • TaskEnd 和 TaskStart 变量的作用域是什么?我只能看到“CoreRefere ...”。这是整个包还是任务的名称?
  • 包名
  • 请注意,我在 postexecute 和 preexecute event 中执行任务。是否与无法访问这些系统变量有关
  • 可能system::taskname变量只能在任务范围内使用。看看它在这个问题的答案中是如何使用的:stackoverflow.com/questions/8123544/… 另外,请看这里:social.msdn.microsoft.com/Forums/sqlserver/en-US/…

标签: ssis


【解决方案1】:

使用系统变量System::TaskName

【讨论】:

  • 我目前正在使用它作为参数传递给方法名列。但是,我在其他任务中使用此存储过程来记录异常。我如何使用它来记录信息
  • 在构建@Message 变量时使用它。
  • 很抱歉没有找到你。我创建了一个名为 hasStarted 的用户定义变量,其中包含的值已启动,并尝试在参数变量映射中连接它。我收到一个错误,它无法在集合中找到变量。我在做 System::TaskName + User::hasStarted
  • 你能举个例子说明你的建议吗
  • 我想为了举个例子,我需要更多关于你想要做什么的信息。您可以发布您尝试过的操作和错误的屏幕截图吗?
猜你喜欢
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
相关资源
最近更新 更多