【发布时间】: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