【问题标题】:Retrieve information on stored procedures检索有关存储过程的信息
【发布时间】:2019-07-18 23:07:53
【问题描述】:

我目前正在记录我们数据库中的所有存储过程和函数。我创建了代码来收集过程的名称和参数,但是是否可以检索有关返回哪些列(如果有)的信息?

我知道有一个系统程序可以返回此信息,但是这是针对单个程序的,因为我需要它用于所有程序。

SELECT SCHEMA_NAME(SCHEMA_ID) AS [Schema],
SO.name AS [ObjectName],
SO.Type_Desc AS [ObjectType (UDF/SP)],
P.parameter_id AS [ParameterID],
P.name AS [ParameterName],
TYPE_NAME(P.user_type_id) AS [ParameterDataType],
P.max_length AS [ParameterMaxBytes],
P.is_output AS [IsOutPutParameter]
FROM sys.objects AS SO
INNER JOIN sys.parameters AS P
ON SO.OBJECT_ID = P.OBJECT_ID
WHERE SO.OBJECT_ID IN ( SELECT OBJECT_ID
FROM sys.objects
) 
ORDER BY [Schema], SO.name, P.parameter_id
GO

有谁知道这是否可行,如果可以,我该怎么做?

提前谢谢你

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    这是你要找的吗?

    SELECT SCHEMA_NAME(SCHEMA_ID) AS [Schema],
    so.object_id,
    SO.name AS [ObjectName],
    SO.Type_Desc AS [ObjectType (UDF/SP)],
    P.parameter_id AS [ParameterID],
    P.name AS [ParameterName],
    TYPE_NAME(P.user_type_id) AS [ParameterDataType],
    P.max_length AS [ParameterMaxBytes],
    P.is_output AS [IsOutPutParameter],
    c.name as [ColumnName],
    TYPE_NAME(c.user_type_id) AS [ColumnDataType],
    c.max_length AS [ColumnMaxBytes]
    FROM sys.objects AS SO
    INNER JOIN sys.parameters AS P
    ON SO.OBJECT_ID = P.OBJECT_ID
    LEFT JOIN sys.columns AS c
    ON SO.OBJECT_ID = c.OBJECT_ID
    WHERE SO.OBJECT_ID IN ( SELECT OBJECT_ID
    FROM sys.objects
    ) 
    ORDER BY [Schema], SO.name, P.parameter_id
    GO
    

    【讨论】:

    • 并没有真正显示我已经拥有的输入/输出参数,但是一些过程从表中返回字段和记录的列表。我所追求的是每个存储过程返回的列列表(如果有的话)
    • 它还显示了列(INNER JOIN sys.parameters AS P ON SO.OBJECT_ID = P.OBJECT_ID LEFT JOIN sys.columns AS c)查看我添加的结果......
    • 很抱歉没有滚动足够远的道歉......这绝对完美正是我想要的非常感谢你
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2010-11-20
    • 2017-06-20
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多