Visual Studio SSIS:是否在“执行SQL”任务中调试SQLStatement?

e3bfsja2  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(160)

我们的SSIS包有一个如下所示的 Execute SQL 任务。如您所见,它具有在Parameter Mapping选项卡中解析的参数。在本例中,四个输入参数是User::SalesIdUser::SalesEmpUser::CustomMsgUser::SalesCountry
问:如何调试这个调用,以便知道正在执行的是什么SQL语句?或者至少知道运行时的参数值是什么。
我尝试在任务的OnPreExecuteEvent中设置断点,然后转到Locals窗口。我能够看到正在使用的所有变量的值,这很好。但是我看不到存储过程及其附加参数的实际调用。
同样,我可以得到每个个体的值

sg3maiej

sg3maiej1#

我不喜欢这个答案,但它是一个选项。
Print语句在执行SQL任务中不起作用。至少,我似乎找不到侦听事件的选项。
由于您当前没有返回结果集,我将使用它们。由于您使用的是OLE DB连接管理器,并且它是一个基于序号的令牌系统,以?作为占位符,因此我将显式声明变量,然后填充它们,而不是过程调用。
有趣的是,我今天学到了一些东西-不要将你的局部变量声明为@p1,@p2等,因为幕后的魔术也会使用这些,你会得到重复的声明错误。

DECLARE @v0 int = ?
, @v1 int = ?
, @v2 int = ?
, @v3 int = ?;

SELECT @v0, @v1, @v2, @v3;

EXECUTE dbo.usp_RegisterSales @v0, @v1, @v2, @v3;

当它运行时,它将生成一个结果集,我们可以在之后检查这些值。
常规选项卡

参数选项卡

结果集选项卡

把所有的东西放在一起

脚本任务只是通过RaiseInformation事件将任何Read或Write变量的值发送到输出日志

bool fireAgain = false;
string message = "{0}::{1} : {2}";
foreach (var item in Dts.Variables)
{
    Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, item.Namespace, item.Name, item.Value), string.Empty, 0, ref fireAgain);
}

输出如下所示

SSIS package "C:\Users\bfellows\source\repos\SO_Trash\SO_Trash\Package7.dtsx" starting.
Information: 0x0 at SCR Echo Back Pre, Scr Echo Back: User::EchoVariable->0
Information: 0x0 at SCR Echo Back Pre, Scr Echo Back: User::EchoVariable1->0
Information: 0x0 at SCR Echo Back Pre, Scr Echo Back: User::EchoVariable2->0
Information: 0x0 at SCR Echo Back Pre, Scr Echo Back: User::EchoVariable3->0
Information: 0x0 at SCR Echo Back Pre, Scr Echo Back: User::Variable->4
Information: 0x0 at SCR Echo Back Pre, Scr Echo Back: User::Variable1->3
Information: 0x0 at SCR Echo Back Pre, Scr Echo Back: User::Variable2->2
Information: 0x0 at SCR Echo Back Pre, Scr Echo Back: User::Variable3->1
Information: 0x0 at SCR Echo Back Post, Scr Echo Back: User::EchoVariable->4
Information: 0x0 at SCR Echo Back Post, Scr Echo Back: User::EchoVariable1->3
Information: 0x0 at SCR Echo Back Post, Scr Echo Back: User::EchoVariable2->2
Information: 0x0 at SCR Echo Back Post, Scr Echo Back: User::EchoVariable3->1
Information: 0x0 at SCR Echo Back Post, Scr Echo Back: User::Variable->4
Information: 0x0 at SCR Echo Back Post, Scr Echo Back: User::Variable1->3
Information: 0x0 at SCR Echo Back Post, Scr Echo Back: User::Variable2->2
Information: 0x0 at SCR Echo Back Post, Scr Echo Back: User::Variable3->1
SSIS package "C:\Users\bfellows\source\repos\SO_Trash\SO_Trash\Package7.dtsx" finished: Success.

如果您需要更长时间的调试/跟踪/故障排除,我会创建一个表并填充上述变量(每行一个)+运行时指标,如@[ System::StartTime ]@[ System::PackageName ]@[ System::ServerExecutionId ]@[ System::TaskID],可能还有@[ System::MachineName]
现在,您就有了一个可重用的模式,它可以随时跟踪包中的参数值。

相关问题