Получить параметры хранимой процедуры с помощью C # или SQL? - PullRequest
50 голосов
/ 14 июня 2010

Я надеялся найти простой способ получить список параметров хранимых процедур.Если в процедуре есть 3 параметра, мне нужен такой список:

param1
param2
param3

Лучше всего сделатьэто в C # Code, но SQL также будет достаточно.Идеи?

Ответы [ 4 ]

74 голосов
/ 14 июня 2010
select * from information_schema.parameters
where specific_name='your_procedure_name'

Также см. Этот пост, чтобы узнать больше методов https://exploresql.com/2016/10/14/different-methods-to-get-parameter-list-of-a-stored-procedure/

55 голосов
/ 14 июня 2010

Для SQL Server это должно работать.

private void ListParms()
{
    SqlConnection conn = new SqlConnection("my sql connection string");
    SqlCommand cmd = new SqlCommand("proc name", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    conn.Open();
    SqlCommandBuilder.DeriveParameters(cmd);
    foreach (SqlParameter p in cmd.Parameters)
    {
       Console.WriteLine(p.ParameterName);
    }
}
10 голосов
/ 14 января 2013

Вы можете сделать это, даже не касаясь SqlConnection, что, на мой взгляд, является бонусом.

Это использует пространство имен SqlServer.Management.Smo, поэтому вам нужна ссылка на Microsoft.SqlServer.ConnectionInfo, Microsoft.SqlServer.Management.Sdk и Microsoft.SqlServer.Smo в вашем проекте.

Затем используйте следующий код:

Server srv = new Server("serverNameHere");
srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect;
srv.ConnectionContext.LoginSecure = false; //if using username/password
srv.ConnectionContext.Login = "username";
srv.ConnectionContext.Password = "password";
srv.ConnectionContext.Connect();

Database db = srv.Databases["databaseNameHere"];

foreach(StoredProcedure sp in db.StoredProcedures)
{
    foreach(var param in sp.Parameters)
    {
        string paramName = param.Name;
        var dataType = param.DataType;
        object defaultValue = param.DefaultValue;
    }
}
9 голосов
/ 14 июня 2010

Если вы знакомы с Enterprise Library, есть хороший метод, который позволяет DiscoverParameters () , используя прикладной блок доступа к данным .

DbCommand command = new DbCommand();
command.CommandText = @"myStoredProc";
command.CommandType = CommandType.StoredProcedure;

Database database = new SqlDatabase(myConnectionString);
database.DiscoverParameters(command);
// ...

Некоторые ссылки, которые могут помочь:

  1. Метод DiscoverParameters ;
  2. Microsoft.Practices.EnterpriseLibrary.Data Namespace .

Приведенные выше ссылки относятся к EntLib 3.1.В зависимости от используемой версии .NET Framework, вы можете также загрузить нужную версию EntLib, перейдя по ссылке .

.
...