![](/img/trans.png)
[英]How can I provide parameter values to a Stored Proc called by a Stored Proc (SQL Server)?
[英]Using SQL Server Dynamic Management Views, how can I get a Stored Proc Parameter's Default Value?
假设我有一些简单的示例过程,如下所示:
CREATE procedure simpletestproc_prc
(
@companyId int,
@objectid float = 5.678,
@personname varchar(255) = 'hello world'
) as
select @companyId + 10, @objectid, @personname
我可以使用下面的查询来获取所有参数的类型和名称:
SELECT
*
FROM sys.procedures sp
INNER JOIN sys.parameters parm
ON sp.object_id = parm.object_id
INNER JOIN sys.types typ
ON parm.system_type_id = typ.system_type_id
WHERE sp.name = 'simpletestproc_prc'
order by parameter_id
但是这些列(甚至parm.default_value)都没有5.678或“ hello world”。 如何获取这些值? 如果有关系,可以假定使用SQL Server 2005或2008。
http://dev.mainsoft.com/Default.aspx?tabid=181
基本上,您阅读sys.comments(存储过程的文本存储在此处)
这是我使用的功能。 它既快速又脏,但是可以工作:
create function dbo.paramDefault(@ProcName VARCHAR(128),@paramName VARCHAR(64) )
returns varchar(128)
as
begin
DECLARE @theId INT
DECLARE @ans VARCHAR(128)
DECLARE @theLine VARCHAR(2000)
DECLARE @x INT
SET @theID = object_id(@procName)
if @theID is NULL
RETURN @ans
SET @theLine = Object_definition (@theID)
SET @theLine = substring(@theLine,charIndex(@ProcName,@theLine)+len(@procName),999)
SET @theLine = rtrim(ltrim(left(@theLine,charIndex(') as',@theLine)-1)))+','
SET @x = charindex(@paramName,@theLine)
IF @x > 0
BEGIN
SET @theLine = rtrim(SUBSTRING(@theLine,@x,999))
SET @x = charindex(',',@theLine)
SET @theLine = left(@theLine,@x-1)
SET @x = charIndex('=',@theLine)
if @x > 0 SET @ans = rtrim(subString(@theLine,@x+1,999))
END
RETURN @ans
end
GO
select dbo.paramDefault('simpletestProc_prc','personName')
select dbo.paramDefault('simpletestProc_prc','objectID')
select dbo.paramDefault('simpletestProc_prc','companyId')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.