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

Comprobar si existe una tabla en una base de datos de SQL Server

 
Publicado el 25/Feb/2009
Actualizado el 25/Feb/2009
Autor: Guillermo 'guille' Som

En este artículo te muestro el código (para Visual Basic y C#) de una función que sirver para comprobar si existe una tabla en una base de datos de SQL Server.



 

La batallita del agüelo:

Esto que te voy a explicar ahora ya está explicado en otras dos páginas de mi sitio...
La pregunta que te harás (y si no te la haces, pues como si te la hicieras) ¿por qué lo vuelvo a explicar?
La respuesta es porque... sí, jejeje, en serio, es porque el otro día, me preguntaron sobre algo como esto y la verdad es que, aunque sabía que lo tenía explicado, ni me acordaba dónde estaba el código... así que... aquí lo tienes de nuevo.

Y para aquella gente que quiera saber dónde estaba explicado, aquí tiene los links a esos otros "artículos":

 

Comprobar si una tabla está definida en una base de datos de SQL Server

Hace casi un año, cuando publiqué el código para Comprobar si un procedimiento almacenado está definido en una base de datos de SQL Server y comenté que iba a publicar esto que publico ahora... y no es que no lo publicara para darle más  emoción, sino... porque seguramente se me olvidó... como se me olvidan otras muchas cosas... en fin...

La cuestión es que aquí te dejo el código para Visual Basic 2005 (o superior) y también el código de Visual C# 2005 (o superior). Este código es una función que recibe dos parámetros, el primero es el nombre de la base de datos y el Como te imaginarás, para poder acceder a una base de datos de SQL server, también necesitamos saber qué servidor de SQL Server es al que queremos acceder... ese servidor, en este ejemplo, es la instancia SQLEXPRESS del equipo local, por tanto, si quieres comprobar si existe una tabla en una base de datos de otro servidor, tendrás que cambiar el valor que se asigna a la propiedad DataSource del objeto SqlConnectionStringBuilder que se usa internamente para construir la cadena de conexión. También podrías añadir un parámetro que recibiera un objeto SqlConnection con la conexión que prefieras... pero eso es cosa de que lo hagas tú... y si no sabes cómo hacerlo, pues... aprovecha y pregunta en mis foros, que seguro que alguien te responde.

Nota:
El que este código sea para las versiones de Visual Basic y/o Visual C# 2005 o superior es porque se utiliza el objeto SqlConnectionStringBuilder y porque en el código de Visual Basic se utiliza la instrucción Using, si lo modificas, te servirá para versiones anteriores.

 

El código para Visual Basic 2005 o superior de la función que comprueba si una tabla existe en una base de datos:

Private Function existeTabla(ByVal nombreBase As String, _
                             ByVal nombreTabla 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.TABLES " & _
        "WHERE TABLE_TYPE = 'BASE TABLE' " & _
        "AND TABLE_NAME = @nombreTabla"
    Try
        Using con As New SqlConnection(csb.ConnectionString)

            con.Open()

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

            ' 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

 

El código para Visual C# 2005 o superior de la función que comprueba si una tabla existe en una base de datos:

private bool existeTabla(string nombreBase, string nombreTabla)
{
    SqlConnectionStringBuilder csb =
        new SqlConnectionStringBuilder();
    csb.DataSource = "(local)\\SQLEXPRESS";
    csb.InitialCatalog = nombreBase;
    csb.IntegratedSecurity = true;

    string sCmd =
        "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES " +
        "WHERE TABLE_TYPE = 'BASE TABLE' " +
        "AND TABLE_NAME = @nombreTabla";

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

            SqlCommand cmd =
                new SqlCommand(sCmd, con);

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

            // Comprobamos si está
            // Devuelve 1 si ya existe
            // o 0 si no existe
            int n = (int)cmd.ExecuteScalar();

            con.Close();

            return n > 0;
        }
    }
    catch
    {
        return false;
    }
}

 

 

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: 21/11/2024 13:35:14

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024