我从BizTalk服务器调用存储过程并尝试调试它。
1)Use SQL Debugger when stored proc called by an external process 2)Getting sp_tracegenerateevent to work in a stored procedure
我一直在使用SQL Profiler作为我唯一的工具来了解正在发生的事情。但现在,我怀疑我的尝试/捕获是否正常工作。代码在SSMS中运行时工作正常,但是从BizTalk运行时有时看起来像try / catch一直在捕获。
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运行相同的存储过程时,类似" normal"。
BizTalk在DTC交易下运行所有内容。请注意" BEGIN TRY"并且"结束尝试"语句出现在SSMS下的第二个配置文件中(" BEGIN CATCH"未按预期启动),并且它们不会出现在上面的第一个配置文件中(其中sproc从BizTalk执行) )。
然后我添加了#34; BEGIN DISTRIBUTED TRANSACTION"到我在SSMS中的测试脚本,和上面的其他SSMS测试结果相同。
注意:我注意到这个模式有一个更复杂的问题,并希望简化它以便发布在这里。
答案 0 :(得分:10)
只是一个猜测,但可能客户端(在这种情况下为Biztalk)正在使用SET FMTONLY ON
调用过程来提取结果集的形状(如果有的话)。当此设置为ON时,所有分支都被“执行”,包括CATCH块。您看到的结果正是您在SQL事件探查器中获得的结果。