Consulta SQL Server para Conocer las Tablas y Vistas de una Base de Datos

En Sql Server tenemos una sencilla consulta que nos devolverá las tablas y vistas de una base de datos:

SELECT * from Information_Schema.Tables

De aquí nos interesa el campo table_name (nombre de la tabla) y table_type (nos dice si es una tabla o una vista). Por tanto, filtrar por tablas o vistas es bastante sencillo (con el campo table_type).

Para saber si existe una tabla en la base de datos (también nos sirve para las vistas) podemos utilizar la siguiente consulta (vamos a consultar si en Northwind existe la tabla ‘Customers’):

SELECT * from Information_Schema.Tables where table_name=’Customers’

Si esta consulta nos devuelve registros es que existe la tabla (o vista) y si nos devuelve vacío, es que no existe.

40 comentarios en “Consulta SQL Server para Conocer las Tablas y Vistas de una Base de Datos

  1. Hola, un gran saludo, necesito ver si me puedes ayudar, tengo un programa para actualizar una tabla en base a un calculo, pero no me actualiza todo los registros, por cada registro actualiza 5 veces el primer registro leído y en el do While muestra el mimo registro leído, no va al siguiente registro en la lectura, me ayuda? mi email: rafaelhf45@hotmail.com
    Do While cant_regPP < 5 ' listap

    registro = New DataSet
    leo = "select * FROM Pagos_Pend "
    adaptador = New OleDb.OleDbDataAdapter(leo, conexion)
    registro.Tables.Add("Pagos_Pend")
    adaptador.Fill(registro, "Pagos_Pend")

    inmueble = registro.Tables("Pagos_Pend").Rows(0).Item("Nro_InmuebleP")
    Dim dt As DataTable = registro.Tables("Pagos_Pend")
    Dim Fechacomp2 As DateTime
    Dim Fechacomp As DateTime = Date.Now.ToString("MM/yyyy")
    Dim Fechaproc1 As DateTime = CDate(dt.Rows(0).Item("Fecha_Proc")).Date
    Dim Fechacomp1 As DateTime = CDate(dt.Rows(0).Item("Fecha_Mant")).Date
    calinter1 = registro.Tables("Pagos_Pend").Rows(0).Item("Pago_Mant")
    inter = registro.Tables("Pagos_Pend").Rows(0).Item("Int_Pago_Mant")
    Pagototal = registro.Tables("Pagos_Pend").Rows(0).Item("Pago_Total")
    Fechacomp2 = Fechacomp1.ToString("MM/yyyy")
    cant_regPP = cant_regPP + 1

    porcent = 7
    wtotpagmant2 = calinter1.ToString("##.00") ' ENMASCARAR EL MONTO DE MANTENIMIENTO MENSUAL
    calculo = (wtotpagmant2 * porcent) / 100 ' CALCULO INTERES
    calculo2 = calculo.ToString("##.00") + inter ' ENMASCARAR MONTO
    wtotgeneral = calculo2.ToString("##.00") + wtotpagmant2 ' SUMAR MONTO INTERES CON EL DE MANTENIMIENTO
    wtotgen = wtotgeneral.ToString("##.00")

    actualizar = ("UPDATE Pagos_Pend SET Int_Pago_Mant = " & calculo2 & ", Pago_Total = " & wtotgen & " WHERE Nro_InmuebleP = " & inmueble & " ")
    Dim cmdc As New OleDb.OleDbCommand
    cmdc = New OleDb.OleDbCommand(actualizar, conexion)
    MsgBox("antes del UPDATE (" & inmueble & " " & wtotpagmant2 & " " & calculo2 & " " & wtotgen & ")")
    cmdc.ExecuteNonQuery()

    Me gusta

  2. gracias
    pero ..
    SELECT * FROM INFORMATION_SCHEMA.TABLES where TABLE_NAME = «xxx»
    da el siguiente error
    [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name ‘xxx’.

    si le quito la clausula where me muestra todas las tablas y entre ellas esta xxx.
    no entiendo el error.

    Me gusta

  3. Pingback: ip pbx phone systems

  4. * Para traer los elementos de la base de datos:

    SELECT * FROM SYSOBJECTS order by name

    resultado:

    name id xtype uid info status base_schema_ver replinfo parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category cache
    acfi_acumula 759762976 U 1 0 0 0 0 0 2007-09-17 09:34:43.177 0 0 0 U 1 3 0 2007-09-17 09:34:43.177 0 0 0 0 0 0 0
    acfi_paag 1783766624 U 1 0 0 0 0 0 2007-09-17 12:27:50.470 0 0 0 U 1 3 0 2007-09-17 12:27:50.470 0 0 0 0 0 0 0

    * Para traer solo los nombres de las tablas con sus columnas tipo de dato y decimal:

    SELECT so.name AS Tabla, sc.name AS Columna, st.name AS Tipo, sc.max_length AS Tamaño
    FROM sys.objects so INNER JOIN sys.columns sc ON so.object_id = sc.object_id INNER JOIN sys.types st ON st.system_type_id = sc.system_type_id AND st.name != ‘sysname’
    WHERE so.type = ‘U’
    ORDER BY so.name, sc.name

    resultado:

    Tabla Columna Tipo Tamaño
    acfi_acumula aida decimal 9
    acfi_acumula ajuxinfl decimal 9
    acfi_acumula ast_mn_no int 4
    acfi_acumula ast_sb_no int 4
    acfi_acumula depajuinf decimal 9
    acfi_acumula deprecia decimal 9
    acfi_acumula periodo varchar 6
    acfi_paag paag decimal 5
    acfi_paag periodo varchar 6

    Me gusta

  5. Otra forma de sacar las vistas de una base de datos:
    SELECT * FROM SYSOBJECTS WHERE XTYPE = ‘V’

    Utilizo una vista para poner un reporte en linea desde excel. Nada complicado pero es útil.

    Me gusta

  6. podrian pasarme ejemplos aplicados a vistas porfavor¿? y como es q devuelve el registro…..pues genero una vista de sql pero desde visual studio 08 en paginas de contenido de una master page en aspx……..¿?

    Me gusta

Deja un comentario