我正在尝试获取用户填充组合框的所有用户定义存储过程的列表。我们的想法是手动创建一个包含以下列的表:
SProc名称,输入数量,参数1,参数2 ...
用户想要单击一个按钮,SProc会从该表中选择所有这些数据,将其加载到一个数组中并填充组合框。
用户应从组合框中选择存储的proc名称,并显示所需的参数数量(带有相关名称)。
答案 0 :(得分:1)
根据我们在SO聊天中的讨论:
SELECT
sprocs.ROUTINE_NAME,
parms.PARAMETER_NAME,
parms.DATA_TYPE
FROM
INFORMATION_SCHEMA.ROUTINES sprocs
LEFT OUTER JOIN INFORMATION_SCHEMA.PARAMETERS parms ON parms.SPECIFIC_NAME = sprocs.ROUTINE_NAME
WHERE
sprocs.ROUTINE_TYPE = 'PROCEDURE'
--AND PATINDEX('/*<SomeKeyToSearch>*/', sprocs.ROUTINE_DEFINITION) > 0
这将为您提供所有sprocs及其参数和数据类型的列表。请注意,您还需要密切关注数据类型(精度,比例,最大长度等),因为这将用于允许用户调用任意存储过程。一旦在C#应用程序中获得了整个表,就可以根据所需的条件对组/排序/限制进行分组/排序/限制。如果您想确保只从上面的查询返回特定的sprocs,只需使用您可以搜索的某种键向sproc添加顶级注释。
祝你好运。