分别检索存储过程脚本和参数

时间:2012-03-15 13:08:26

标签: c# sql sql-server stored-procedures parameters

我想使用C#访问存储过程脚本。

我使用了EXEC sp_HelpText STOREDPROCNAME。这工作正常。

有没有办法分别检索存储过程查询和存储过程参数?

ex:我需要:

delete from [dbo].[tblTransactions] where [ID] = @ID

@ID numeric(18,0)

分开。

怎么做?

3 个答案:

答案 0 :(得分:3)

最简单的方法是直接使用SqlCommandBuilder.DeriveParameters

询问数据库
  

从中指定的存储过程中检索参数信息   SqlCommand并填充了Parameters的Parameters集合   指定的SqlCommand对象。

还有

exec [dbname].[sys].[sp_procedure_params_rowset] @procedure_name=N'uspblabla'

您可以通过sp_helptext sp_procedure_params_rowset查看来源。

答案 1 :(得分:2)

你可以通过这种方式获得身体,但是没有办法解析个别陈述:

SELECT definition FROM sys.sql_modules 
WHERE [object_id] = OBJECT_ID('dbo.procedurename');

您可以通过以下方式获取其参数:

SELECT name, system_type_id, max_length, precision, scale
FROM sys.parameters
WHERE [object_id] = OBJECT_ID('dbo.procedurename');

请注意,您无法在没有强力解析定义的情况下确定参数是否具有默认值,如果参数具有默认值,则默认值是什么。您可以使用RegEx或其他解析方法更好地在C#中执行这些操作。

答案 2 :(得分:1)

您可以添加对Microsoft.SqlServer.Smo的引用,并使用类似于以下内容的代码:

void Main()
{
    Server server = new Server("server");
    Database db = server.Databases["database"];

    string sprocName = "StoredProcName";

    StoredProcedure proc = db.StoredProcedures[sprocName];
    if (proc != null)
    {
        foreach (StoredProcedureParameter parameter in proc.Parameters)
        {
            Console.WriteLine("{0}:  {1}", parameter.DataType.Name, parameter.Name);
        }

        Console.WriteLine(proc.TextBody);
    }
}

可以找到其他信息Here