我正在从BizTalk server调用存储过程并尝试对其进行调试。
(1)
Use SQL Debugger when stored proc called by an external process
(2)
Getting sp_tracegenerateevent to work in a stored procedure
我一直在使用SQL事件探查器作为唯一了解情况的工具。但现在,我怀疑我的尝试/捕捉是否正确。在SSMS中运行时,代码工作正常,但在BizTalk中运行时,有时似乎总是在尝试/捕获。
ALTER PROCEDURE WhatItsName
@CatchErrors varchar(max) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT OFF;
DECLARE @debugMessage varchar(max) = ''
DECLARE @RowCreateBy VARCHAR (100)
SET @RowCreateBy = '108004'
BEGIN TRY
SET @RowCreateBy = '108005'
END TRY
BEGIN CATCH
SET @debugMessage = 'set @RowCreatedBy Failed - how can this be ??? '
END CATCH
etc...
探查器中的结果:
根据我们在上面的分析器中看到的情况,我的try/catch是否按预期工作?
现在,当我从SSMS运行相同的存储过程时,会出现“正常”之类的情况。
BizTalk在DTC事务下运行所有操作。请注意,“BEGIN TRY”和“END TRY”语句显示在SSMS下的第二个配置文件中(并且“BEGIN CATCH”没有按预期触发),它们没有显示在上面的第一个配置文件中(存储过程是从BizTalk执行的)。
然后,我在SSMS中的测试脚本中添加了“开始分布式事务”,结果与上面的其他SSMS测试相同。
注意:我注意到这个模式有一个更复杂的问题,我想简化它以便在这里发布。