我知道函数名TestOptionalParameter
和参数名number
。
参数是可选的,并且具有默认值,可以稍后更改
功能是
CREATE FUNCTION TestOptionalParameter
(
@number int = 1
)
RETURNS TABLE
AS
RETURN
(
SELECT @number * @number as sqr
)
如何从同一数据库中的另一个函数(或存储过程)获取值1
?
更新
基本上我不需要功能的结果(我可以用select * from TestOptionalParameter(default)
得到它);我试图知道什么是default
值(在我的示例中为1)并将其保存为变量(类似于declare x int = dbo.GetDefaultValue('TestOptionalParameter', '@number')
)
答案 0 :(得分:1)
获取参数值的唯一方法似乎是解析ROUTINE_DEFINITION
视图的information_schema.routines
列,因为显然该值未存储在任何列中,而是根据定义进行评估运行时。
如果你事先知道参数名称并且程序中的文字格式正确,那么这样的事情就可以了。请注意,在此示例中,返回的子字符串只有1个字符长,因此如果值可以更长,则必须提取更长的字符串。
SELECT
SUBSTRING
(
routine_definition,
PATINDEX('%@number int = %', ROUTINE_DEFINITION) + 14,
1
) ParamValue
FROM information_schema.routines
WHERE routine_type = 'function'
AND routine_name = 'TestOptionalParameter'
如果您不知道参数名称,可以在上面引用的视图中找到它们,因此应该可以通过解析文本定义来查找所有默认值,尽管这并不容易。
答案 1 :(得分:0)
您可以使用以下查询来获取有关功能的详细信息
SELECT * FROM information_schema.routines WHERE routine_type='function' AND routine_name ='TestOptionalParameter'
答案 2 :(得分:0)
根据您的评论回复,我认为您希望在当前参数值传递的另一个函数中调用函数。
所以我想,这个例子可能适合你。
CREATE FUNCTION TestOptionalParameter
(
@number int = 1
)
RETURNS TABLE
AS
RETURN
(
SELECT @number * @number as sqr
)
CREATE FUNCTION TestOptionalParameterNew
(
@number int = 1
)
RETURNS TABLE
AS
RETURN
(
SELECT @number * @number as total from [dbo].[TestOptionalParameter](@number)
)
select * from TestOptionalParameterNew(4)