Sql server 2008 如何捕获在ssis包运行时内传递给存储过程的参数
我有一个场景,我的客户告诉我他们的sql server代理作业有时会失败。经过调查,我们发现sql代理作业调用ssis包,该包使用参数(?、、?)在内部调用SP,并且根据错误消息在SP内部的TSQL中生成错误 我想在新的查询窗口中手动捕获参数以测试SP执行。我们在客户端环境中没有SSDT工具来调试SSIS包以识别参数,但是我们已经在SSMS中导入了SSIS包Sql server 2008 如何捕获在ssis包运行时内传递给存储过程的参数,sql-server-2008,Sql Server 2008,我有一个场景,我的客户告诉我他们的sql server代理作业有时会失败。经过调查,我们发现sql代理作业调用ssis包,该包使用参数(?、、?)在内部调用SP,并且根据错误消息在SP内部的TSQL中生成错误 我想在新的查询窗口中手动捕获参数以测试SP执行。我们在客户端环境中没有SSDT工具来调试SSIS包以识别参数,但是我们已经在SSMS中导入了SSIS包 是否有任何方法可以捕获在运行时通过SSMS中的ssis包传递给SP的参数?您可以打开sql server profiler,并在执行ssi
是否有任何方法可以捕获在运行时通过SSMS中的ssis包传递给SP的参数?您可以打开sql server profiler,并在执行ssis包时捕获在数据库中运行的查询,在那里,您可以看到传入的参数。修改sp以捕获参数,然后再进行进一步处理。像这样:
CREATE TABLE dbo.ProcParameters
(
SeqNo int identity(1,1),
ProcNm VARCHAR(255),
Param1 nvarchar(255),
Param2 nvarchar(255),
ExecResult NVARCHAR(MAX),
ExecTime DATETIME DEFAULT(GETDATE())
)
create procedure MyProc
(
@Param1 nvarchar(255),
@Param2 nvarchar(255)
)
as
begin
declare @Id int,@ExecResult NVARCHAR(MAX)
insert into ProcParameters
(
ProcNm ,Param1 ,Param2
)
VALUES('MyProc',@Param1 ,@Param2)
select @id = @@identity
begin try
/*
Your Code goes here
*/
SET @ExecResult ='Success'
end try
BEGIN CATCH
select @ExecResult = ERROR_MESSAGE()
END CATCH
UPDATE ProcParameters
SET ExecResult = @ExecResult WHERE SeqNo = @id
end
现在,每次执行proc时,这些值都将存储在ProcParameters表中,您可以从那里获得它。此外,每次执行的结果都可以在ExecResult列中找到。这很简单,因为您可以在要调试的SP中编写代码:
1- Create a table for variable capture
2- in procedure just give insert statement like
Insert into dbo.VariableLog values (@param1 , @param2 )
您是否有权更改客户端数据库中的sp?是@jayasuryasathesh我们可以编辑SPS,然后在开始进一步处理之前,尝试在sp中添加传入参数的日志,然后您可以从该表中跟踪参数