【问题标题】:Select stored procedure variables选择存储过程变量
【发布时间】:2018-10-26 16:29:17
【问题描述】:

有没有办法选择存储过程将接收的变量?

例如,我有一个客户表,我的主键是一个自动数字长。

我的存储过程称为SelectClientByKey,类似于

select * 
from clients 
where clientId = @clientid

我有许多其他存储过程,我想进行查询以获取存储过程具有的变量及其数据类型。

类似:

Select Variable, Type 
From StoredProcedure 
Where StoredProcedure.Name = 'SelectClientByKey'

结果应该是

@clientId bigInt

我不确定这是否可能,有什么建议吗?

【问题讨论】:

  • 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ...

标签: sql variables stored-procedures


【解决方案1】:

无耻地从here盗取。如果您运行它,它将为您提供所有存储过程及其参数的列表以及一些有用的扩展信息。

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
   WHERE TYPE IN ('P','FN')
)
ORDER BY [Schema], SO.name, P.parameter_id
GO

【讨论】:

    【解决方案2】:

    这是可能的。您可以使用以下 SQL 查询来获取存储过程、参数列表及其数据类型:

    SELECT 
        o.name as StoredProcedure, p.name as Parameter, t.name as DataType
    FROM 
        sys.all_objects o
    JOIN
        sys.parameters p ON p.object_id = o.object_id
    JOIN
        sys.types t ON t.system_type_id = p.system_type_id
    WHERE 
        o.name = 'SelectClientByKey'    -- Your stored procedure name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      相关资源
      最近更新 更多