![](/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.