如何获取表函数的可选参数的默认值

时间:2015-02-25 09:10:18

标签: sql sql-server-2008

我知道函数名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')

3 个答案:

答案 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)