我们的SSIS
包有一个如下所示的 Execute SQL 任务。如您所见,它具有在Parameter Mapping
选项卡中解析的参数。在本例中,四个输入参数是User::SalesId
、User::SalesEmp
、User::CustomMsg
和User::SalesCountry
。
问:如何调试这个调用,以便知道正在执行的是什么SQL语句?或者至少知道运行时的参数值是什么。
我尝试在任务的OnPreExecuteEvent
中设置断点,然后转到Locals窗口。我能够看到正在使用的所有变量的值,这很好。但是我看不到存储过程及其附加参数的实际调用。
同样,我可以得到每个个体的值
1条答案
按热度按时间sg3maiej1#
我不喜欢这个答案,但它是一个选项。
Print语句在执行SQL任务中不起作用。至少,我似乎找不到侦听事件的选项。
由于您当前没有返回结果集,我将使用它们。由于您使用的是OLE DB连接管理器,并且它是一个基于序号的令牌系统,以
?
作为占位符,因此我将显式声明变量,然后填充它们,而不是过程调用。有趣的是,我今天学到了一些东西-不要将你的局部变量声明为@p1,@p2等,因为幕后的魔术也会使用这些,你会得到重复的声明错误。
当它运行时,它将生成一个结果集,我们可以在之后检查这些值。
常规选项卡
参数选项卡
结果集选项卡
把所有的东西放在一起
脚本任务只是通过RaiseInformation事件将任何Read或Write变量的值发送到输出日志
输出如下所示
如果您需要更长时间的调试/跟踪/故障排除,我会创建一个表并填充上述变量(每行一个)+运行时指标,如@[ System::StartTime ]@[ System::PackageName ]@[ System::ServerExecutionId ]@[ System::TaskID],可能还有@[ System::MachineName]
现在,您就有了一个可重用的模式,它可以随时跟踪包中的参数值。