存储过程的文本输出

时间:2014-04-09 17:49:37

标签: sql stored-procedures ssis

我创建了一个SQL存储过程,当我从SQL Management Studio调用它时会产生预期的结果,它有一个输出参数,这个消息告诉我proc失败的地方,如果失败的话。这是proc

的顶部
CREATE PROCEDURE [dbo].[uspProgramUpdate] 
    @EmailFailMessage VARCHAR(100) OUTPUT

在我的存储过程的底部是我设置变量值的地方:

BEGIN CATCH
    ROLLBACK TRAN [CoS1]
    RAISERROR ('***An error occurred during processing, all transactions have been rolled back.  Correct the error and restart this process.***', 16, 1)
    SET @EmailFailMessage = '***An error occurred during processing, all transactions have been rolled back.  Correct the error and restart this process.***'
END CATCH

我想做的事情(我无法弄清楚)是如何捕获EmailFailMessage的文本,以便我可以在SSIS中的电子邮件中使用该文本。

我在SSIS中创建了一个执行SQL任务,它在SQL服务器上成功执行存储过程。我已经成功捕获了RAISERROR事件,当我运行SSIS包时,我可以在Visual Studio窗口的输出窗口中看到:

Error: 0xC002F210 at Execute SQL - run uspProgramUpdate, Execute SQL Task: Executing the query "EXEC uspProgramUpdate ?" failed with the following error: "***An error occurred during processing, all transactions have been rolled back.  Correct the error and restart this process.***". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
Task failed: Execute SQL - run uspProgramUpdate

SSIS任务的SQLStatement属性是:

EXEC uspCoSSleepProgramUpdate ? OUTPUT

我有以下SSIS变量:

User::EmailFailMessage (string), value = asdf

并且参数映射到参数映射中的SSIS SQL任务,如下所示:

Variable Name| Direction | Data Type | Parameter Name | Parameter Size
User::EmailFailMessage | Output | VARCHAR | @EmailFailMessage | -1

我有一个正在调用的电子邮件任务以及我设置的电子邮件任务:

MessageSource = @[User::EmailFailMessage]

当我运行SSIS包并收到电子邮件时,电子邮件的消息(正文)在运行存储过程后没有来自SQL的消息。它确实为User :: EmailFailMessage变量设置了初始值,我希望它能够改变,但它不是。

除此之外,我还尝试在执行SQL任务的参数映射区域中使用0作为参数名称。使用它不会改变结果。

1 个答案:

答案 0 :(得分:1)

我个人使用名为User :: dataFlowExceptionMessage的on Error事件处理程序中提供的错误消息变量。这将发送失败任务发送的确切错误消息。那将是从反恐中冒出来的东西。 BUt我建议您使用真正的错误消息作为提升错误测量的一部分,以便更容易理解回滚发生的原因。我想知道确切的错误。

您可以做的另一件事是将您的错误放入表变量中,然后将其插入到回滚后的日期和proc名称的异常表中。表变量仍然在回滚范围内。然后,您可以查看该表以提取您的电子邮件任务的消息,并且您还可以准确记录失败的时间以及对故障排除有用的时间和频率。