我有一个场景,我的客户告诉我他们的sql server代理作业有时会失败。经过调查,我们发现sql代理程序作业调用了一个ssis包,它在内部调用带参数(?,?,?)的SP,并且根据错误消息在SP内部的TSQL中生成错误。
我想手动捕获参数以在新的查询窗口中测试SP执行。我们在客户端环境中没有用于调试SSIS包以识别参数的SSDT工具,但是我们已经在SSMS中导入了ssis包。
有没有办法可以通过SSMS中的ssis包捕获在运行时传递给SP的参数?
答案 0 :(得分:1)
您可以打开sql server profiler并在执行SSIS包时捕获正在数据库中运行的查询,在那里您可以看到传入的参数。
答案 1 :(得分:1)
修改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列中找到。
答案 2 :(得分:1)
这个很简单,因为您可以在SP中编写要调试的代码:
1- Create a table for variable capture
2- in procedure just give insert statement like
Insert into dbo.VariableLog values (@param1 , @param2 )