我使用xm_cmdshell在过程中调用SSIS包。下面是存储过程的代码部分。
DECLARE @ReturnCode INT
EXEC @ReturnCode=xp_cmdshell @cmd
IF @ReturnCode <>0
BEGIN
END
@cmd具有DTEXEC命令来执行SSIS包。 如果SSIS包失败,我想访问IF子句中的SSIS错误消息。我怎样才能做到这一点?
答案 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'