有没有地方可以找到用于 运行 存储过程的参数值?
Is there a place to find the parameter values used to run a stored procedure?
我刚刚被要求测试 200 多个存储过程(在 DML 更改和重新编译之后)以确保它们在没有实施单元测试的数据库中工作。
因为我不知道所有这些存储过程的 "appropriate" 输入是什么,所以我想知道是否有 运行 过程的日志以及用于运行 他们。
如果不是,是否有一种方法可以在不知道其参数的有效输入是什么的情况下测试一堆程序?
或者我要了解为什么系统应该从系统开始就包含测试?
谢谢
我认为您无法从 sys tables
之类的地方或其他地方获取此信息。您可以做的一件事是使用 SQL Server Profiler
或 Extended Events
。这样您就可以捕获所有带有您需要的参数的过程调用。
原来我没能从数据库中得到我希望得到的信息。
因此,我创建了一个执行列表,其中包含我可以使用以下参数找到的所有存储过程和函数:
DECLARE @NAME NVARCHAR(100) =NULL, @SPECIFIC NVARCHAR(100), @PARAMETER NVARCHAR(500)
DECLARE @LISTING NVARCHAR(MAX) =''
DECLARE PARAM_CURSOR INSENSITIVE CURSOR FOR
SELECT SPECIFIC_NAME, PARAMETER_NAME
FROM INFORMATION_SCHEMA.PARAMETERS
where SPECIFIC_NAME in (
select OBJECT_NAME(object_id) name
from sys.objects
where (OBJECT_DEFINITION(object_id) LIKE 'whatever you''re querying'
)
)
OPEN PARAM_CURSOR
FETCH NEXT FROM PARAM_CURSOR INTO @SPECIFIC, @PARAMETER
WHILE @@FETCH_STATUS = 0
BEGIN
IF @NAME = @SPECIFIC
SET @LISTING = @LISTING + ',' + @PARAMETER
ELSE
BEGIN
SET @NAME = @SPECIFIC
SET @LISTING = @LISTING + CHAR(13)+CHAR(10)+ 'EXEC '+@NAME+' '+@PARAMETER
END
IF LEN(@LISTING) > 3000
begin
PRINT @LISTING
set @listing = ''
end
FETCH NEXT FROM PARAM_CURSOR INTO @SPECIFIC, @PARAMETER
END
PRINT @LISTING
close PARAM_CURSOR
DEALLOCATE PARAM_CURSOR
然后我创建了一个包含所有常用参数的列表,并找出适合每个参数的值。
显然这并不理想,但由于找不到其他方法,我不得不手动做一些事情。
希望这对以后的其他人有所帮助!
谢谢
我刚刚被要求测试 200 多个存储过程(在 DML 更改和重新编译之后)以确保它们在没有实施单元测试的数据库中工作。
因为我不知道所有这些存储过程的 "appropriate" 输入是什么,所以我想知道是否有 运行 过程的日志以及用于运行 他们。
如果不是,是否有一种方法可以在不知道其参数的有效输入是什么的情况下测试一堆程序?
或者我要了解为什么系统应该从系统开始就包含测试?
谢谢
我认为您无法从 sys tables
之类的地方或其他地方获取此信息。您可以做的一件事是使用 SQL Server Profiler
或 Extended Events
。这样您就可以捕获所有带有您需要的参数的过程调用。
原来我没能从数据库中得到我希望得到的信息。 因此,我创建了一个执行列表,其中包含我可以使用以下参数找到的所有存储过程和函数:
DECLARE @NAME NVARCHAR(100) =NULL, @SPECIFIC NVARCHAR(100), @PARAMETER NVARCHAR(500)
DECLARE @LISTING NVARCHAR(MAX) =''
DECLARE PARAM_CURSOR INSENSITIVE CURSOR FOR
SELECT SPECIFIC_NAME, PARAMETER_NAME
FROM INFORMATION_SCHEMA.PARAMETERS
where SPECIFIC_NAME in (
select OBJECT_NAME(object_id) name
from sys.objects
where (OBJECT_DEFINITION(object_id) LIKE 'whatever you''re querying'
)
)
OPEN PARAM_CURSOR
FETCH NEXT FROM PARAM_CURSOR INTO @SPECIFIC, @PARAMETER
WHILE @@FETCH_STATUS = 0
BEGIN
IF @NAME = @SPECIFIC
SET @LISTING = @LISTING + ',' + @PARAMETER
ELSE
BEGIN
SET @NAME = @SPECIFIC
SET @LISTING = @LISTING + CHAR(13)+CHAR(10)+ 'EXEC '+@NAME+' '+@PARAMETER
END
IF LEN(@LISTING) > 3000
begin
PRINT @LISTING
set @listing = ''
end
FETCH NEXT FROM PARAM_CURSOR INTO @SPECIFIC, @PARAMETER
END
PRINT @LISTING
close PARAM_CURSOR
DEALLOCATE PARAM_CURSOR
然后我创建了一个包含所有常用参数的列表,并找出适合每个参数的值。 显然这并不理想,但由于找不到其他方法,我不得不手动做一些事情。
希望这对以后的其他人有所帮助!
谢谢