cómo verificar si existe un procedimiento almacenado o no en el servidor sql usando el código C#

cómo verificar si existe un procedimiento almacenado o no en el servidor sql usando el código C#

Prueba:

if exists(select * from sys.objects where type = 'p' and name = '<procedure name>' )

También puedes verificar eso con c#:

string connString = "";
string query = "select * from sysobjects where type='P' and name='MyStoredProcedureName'";
bool spExists = false;
using (SqlConnection conn = new SqlConnection(connString))
{
    conn.Open();
    using (SqlCommand command = new SqlCommand(query, conn))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                spExists = true;
                break;
            }
        }
    }
}

cree una clase de extensión para DbContext:

internal static class DbContextExtensions
{
    public static bool StoredProcedureExists(this DbContext context,
        string procedureName)
    {
        string query = String.Format(
            @"select top 1 from sys.procedures " +
              "where [type_desc] = '{0}'", procedureName);
        return dbContext.Database.SqlQuery<string>(query).Any();
    }
}

Como comentó robIII, este código no debe publicarse en el mundo exterior, ya que hace que la base de datos sea vulnerable a los piratas informáticos (¡gracias RobIII!). Para evitar esto, use una declaración parametrizada. El problema con el método mencionado anteriormente se describe aquí

La solución es poner nombreprocedimiento como parámetro en una sentencia SQL. SQL verificará si el parámetro de cadena tiene el formato deseado, inhibiendo así las llamadas maliciosas:

public static bool ImprovedExists(this DbContext dbContext, string procedureName)
{
    object[] functionParameters = new object[]
    {
        new SqlParameter(@"procedurename", procedureName),
    };
    const string query = @"select [name] from sys.procedures where name= @procedurename";
    return dbContext.Database.SqlQuery<string>(query, functionParameters).Any();
}

Encontré esto en MSDN

select * from sys.objects where type_desc = 'SQL_STORED_PROCEDURE' AND name = 'Sql_PersonInsert'