el Guille, la Web del Visual Basic, C#, .NET y más...

Comprobar si un procedimiento almacenado está definido

 
Publicado el 16/Abr/2008
Actualizado el 17/Abr/2008
Autor: Guillermo 'guille' Som

Una función para comprobar si un procedimiento almacenado está definido en una base de datos de SQL Server. Con el código para C# y Visual Basic.



 

La batallita del agüelo:

Estos últimos días he estado dando (impartiendo) un curso de ADO.NET en la Universidad de Alicante, en la Politécnica de San Vicente del Raspeig, y entre las cosillas que hemos estado haciendo, les mostré el código para averiguar si una base de datos existe, si existe una tabla y también si existe un procedimiento almacenado, ya que en algunos de los ejemplos, se creaban por código estos elementos, y claro, si ya existen, no puedes crearlos, porque daría error.

 

Comprobar si un procedimiento almacenado está definido en una base de datos de SQL Server 2005

En este "artículo" te muestro la forma de comprobar si existe un procedimiento almacenado. Otro día publicaré el código que comprueba lo de la base de datos y lo de las tablas, que aunque ya tengo publicado algo sobre el tema, pues... lo he simplificado más y así será más fácil de usar para "averiguar" si esos objetos existen o no.

Primero te muestro el código de C#, ya que este curso lo he estado dando con el lenguaje de los puntos y comas, y más tarde (u otro día), crearé el código para Visual Basic (solo ha sido unas horas después).

Este es el código para Visual C# 2005 o superior.

bool existeProcedimiento(string nombreBase, string nombrePA)
{
    SqlConnectionStringBuilder csb =
        new SqlConnectionStringBuilder();

    csb.DataSource = "(local)\\SQLEXPRESS";
    csb.InitialCatalog = nombreBase;
    csb.IntegratedSecurity = true;

    string sCmd =
        "SELECT COUNT(*) FROM INFORMATION_SCHEMA.ROUTINES " +
        "WHERE ROUTINE_TYPE = 'PROCEDURE' " +
        "AND ROUTINE_NAME = @nombrePA";

    using(SqlConnection con =
        new SqlConnection(csb.ConnectionString))
    {
        con.Open();

        SqlCommand cmd =
            new SqlCommand(sCmd, con);

        cmd.Parameters.AddWithValue("@nombrePA", nombrePA);

        int n = (int)cmd.ExecuteScalar();

        con.Close();

        return n > 0;
    }
}

Este es el código para Visual Basic 2005 o superior.

Private Function existeProcedimiento(ByVal nombreBase As String, _
                                     ByVal nombrePA As String) As Boolean

    Dim csb As New SqlConnectionStringBuilder()
    With csb
        .DataSource = "(local)\SQLEXPRESS"
        .InitialCatalog = nombreBase
        .IntegratedSecurity = True
    End With

    Dim sCmd As String = _
        "SELECT COUNT(*) FROM INFORMATION_SCHEMA.ROUTINES " & _
        "WHERE ROUTINE_TYPE = 'PROCEDURE' " & _
        "AND ROUTINE_NAME = @nombrePA"
    Try
        Using con As New SqlConnection(csb.ConnectionString)

            con.Open()

            Dim cmd As New SqlCommand(sCmd, con)
            cmd.Parameters.AddWithValue("@nombrePA", nombrePA)

            ' Comprobamos si está
            ' Devuelve 1 si ya existe
            ' o 0 si no existe
            Dim n As Integer = CInt(cmd.ExecuteScalar())

            con.Close()

            Return n > 0
        End Using
    Catch
        Return False
    End Try
End Function

 

A esta función debemos pasarle el nombre de la base de datos y el procedimiento almacenado que queremos saber si está definido o no y devolverá verdadero o falso, según esté definido o no.

Por cierto, un procedimiento almacenado es un "stored procedure" por si te gusta más usar el inglispitinglis ;-)))

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo

 


Espacios de nombres usados en el código de este artículo:

System.Data.SqlClient
 



 


La fecha/hora en el servidor es: 13/11/2024 9:44:43

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024