如何从Delphi 2006传递时捕获存储过程文本

时间:2011-03-04 01:51:56

标签: sql sql-server-2005 delphi

全部,

我的delphi代码中有一个大的(100+)参数列表。这适用于MS SQL Server 2005.出于调试目的,我想捕获存储过程命令的文本,因此我可以在SQL服务器上执行它并调试SP。有没有办法可以捕获究竟传递给数据库的内容?我考虑过使用跟踪,如果失败了,我明天会尝试,但是设置和筛选并抓住SP很麻烦。

由于

2 个答案:

答案 0 :(得分:1)

您应该使用SQL Server Profiler。使用默认设置启动新跟踪。让它在客户端执行SP时运行。停止追踪。使用ctrl-F并搜索SP名称。

答案 1 :(得分:0)

我通常不关心玩编程环境。

如果您可以识别ClientProcessID (客户端程序的任务管理器中显示的PID),那么分析将是一个不错的选择 - 应该将其缩小到足够的范围。

我喜欢的另一个选择是在SQL Server端简单地捕获它。

示例proc

create proc takes3params
@a int, @b varchar(100), @c datetime
as
select @a, @b, @c

变为

alter proc takes3params
@a int, @b varchar(100), @c datetime
as
insert capture_takes3params(a,b,c) select @a, @b, @c  -- << -- added
select @a, @b, @c

支持表是参数的镜像,另外还有2个控制列

create table capture_takes3params(
id int identity primary key, captured datetime default(getdate()), -- control
a int, b varchar(100), c datetime
)

当proc有默认值时,这不起作用。

<小时/>

修改

  

我们使用ADO连接到MS SQL。不确定100+ params的替代方案是什么,可能通过表结构?建议欢迎!我们传递的HL7消息通常有100个左右的字段。 -

表值参数仅从我记得的SQL Server 2008开始提供。这在Delphi中看起来也很笨拙 - 我会考虑在TSQL中解析一个XML参数,而2005年对它有很好的支持。