.net 以编程方式确定存储过程中有多少个参数

.net 以编程方式确定存储过程中有多少个参数,.net,sql,sql-server,sql-server-2008,tsql,.net,Sql,Sql Server,Sql Server 2008,Tsql,SQL Server中的目录视图中是否有任何内容可以为您提供存储过程列表,如select name from sys.PROCEDULES,它还可以告诉您每个过程需要多少参数?Intellisense将为您提供参数的名称,VisualStudio也知道这些名称。是否有更好的方法来获取存储过程的结果以及每个过程使用的参数的数量和/或名称 我想可以这样做的是,他们解析了sp_helptext'sprocName',但我认为有更好的方法 再挖一点挖出来 ;with x as ( SELECT

SQL Server中的目录视图中是否有任何内容可以为您提供存储过程列表,如select name from sys.PROCEDULES,它还可以告诉您每个过程需要多少参数?Intellisense将为您提供参数的名称,VisualStudio也知道这些名称。是否有更好的方法来获取存储过程的结果以及每个过程使用的参数的数量和/或名称

我想可以这样做的是,他们解析了sp_helptext'sprocName',但我认为有更好的方法

再挖一点挖出来

;with x
as
(
SELECT 
    p.name AS Parameter,        
    t.name AS [Type],
    sp.name
FROM sys.procedures sp
JOIN sys.parameters p 
    ON sp.object_id = p.object_id
JOIN sys.types t
    ON p.system_type_id = t.system_type_id
)
select name,Parameter,COUNT(*)
from x
group by name,Parameter
哪一个就可以了。

试试这个:

select * from information_schema.parameters
where specific_name='your_procedure_name'
试试这个:

select * from information_schema.parameters
where specific_name='your_procedure_name'

您可以获得如下参数信息:

declare @ProcedureName sysname;
set @ProcedureName = '[dbo].[YourProcedureName]';

select  sp.name, 
        spa.name, 
        spa.is_output 
from    sys.procedures sp
join    sys.parameters spa on
        sp.object_id = spa.object_id
where   sp.object_id = object_id(@ProcedureName);

您可以获得如下参数信息:

declare @ProcedureName sysname;
set @ProcedureName = '[dbo].[YourProcedureName]';

select  sp.name, 
        spa.name, 
        spa.is_output 
from    sys.procedures sp
join    sys.parameters spa on
        sp.object_id = spa.object_id
where   sp.object_id = object_id(@ProcedureName);

如前所述,如果使用.NET语言来实现此目的,则可以使用SqlCommandBuilder的方法。这样,您就不必在后端编写任何内容,而只需在.NET代码中编写即可。

如果您使用的是.NET语言,则可以使用SqlCommandBuilder方法。这样,您就不必在后端编写任何东西,而只需在.NET代码中编写即可。

Microsoft提供了一些有趣的过程。您可以从中选择正确的数据。另见


微软提供了一些有趣的程序。您可以从中选择正确的数据。另见


你是想用Visual Studio中提到的.NET语言还是直接在TSQL中实现这一点?@YuriyGalanter在Visual Studio中如何,因为我找到了一个TSQL解决方案,你不能只制作上述TSQL的存储过程:有更好的方法,看到我下面的答案了吗?你是想用Visual Studio中提到的.NET语言还是直接在TSQL中实现这一点?@YuriyGalanter在Visual Studio中如何,因为我找到了一个TSQL解决方案,而你不能只制作上述TSQL的存储过程:有一个更好的方法,看到我下面的答案只是好奇,为什么要创建变量,而不是只创建Where子句,我想,如果您是从DAL调用等中获取它,那么sp.name='x'只是一个习惯。使用object_id可以传递数据库id以及用于名称解析的模式。啊,太好了。我必须将其归档到我的工具箱中。只是好奇,为什么你要创建变量,而不只是创建Where子句,而sp.name='x'我猜只是一个习惯,以防你从DAL调用中获取它,等等。使用object_id允许你传递数据库id以及用于名称解析的模式。啊,太好了。我得把它归档在工具箱里。