如何捕获SSIS中发生的错误

时间:2018-03-27 21:53:04

标签: sql-server ssis

我使用xm_cmdshell在过程中调用SSIS包。下面是存储过程的代码部分。

DECLARE @ReturnCode INT

EXEC @ReturnCode=xp_cmdshell @cmd

IF @ReturnCode <>0
BEGIN

END

@cmd具有DTEXEC命令来执行SSIS包。 如果SSIS包失败,我想访问IF子句中的SSIS错误消息。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

要实现您的目标,请在SSIS包中使用SSIS logging。例如,您可以登录到表。在您的SQL脚本中,您可以在调用xp_cmdshell之后读取该表以获取错误。

另请注意,MS正在远离DTExec,请查看SSIS catalog

答案 1 :(得分:0)

部分地,您可以通过以下方式实现:

DECLARE @output TABLE (lines varchar(2000))
DECLARE @ReturnCode INT

INSERT INTO @output
EXEC @ReturnCode=xp_cmdshell @cmd

IF @ReturnCode <>0
BEGIN
--do something with output
SELECT lines FROM @output WHERE lines IS NOT NULL   

END

但是,正如@under所提到的,考虑使用SSIS目录。在这种情况下,完成任务可能会简单得多:

启动SSIS包:

Declare @execution_id bigint
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx',
    @execution_id=@execution_id OUTPUT,
    @folder_name=N'Deployed Projects',
      @project_name=N'Integration Services Project1',
    @use32bitruntime=False,
      @reference_id=Null
Select @execution_id
EXEC [SSISDB].[catalog].[start_execution] @execution_id

查询错误:

SELECT * FROM SSISDB.catalog.event_messages
WHERE operation_id = @execution_id AND event_name = 'OnError'