none
Listar todas las BD, esquemas, tablas y procedimientos de todas las bases de datos. RRS feed

  • Pregunta

  • En SQL Server 2016, como puedo hacer un select que me obtenga todas los objetos de todas las bases de datos?, por ejemplo, si desea obtener todas las tablas simplemente hago select * from sys.tables, pero el problema es que me lista solamente las tablas de la base de datos del usuario, yo necesito que me lista de todas las bases de datos incluyendo una columna que indique el ID de la base de datos a la que pertenece, y lo mismo para las columnas de las tablas, procedimientos almacenados y sus parámetros, bueno de todos los objetos.

    Gracias de antemano, saludos cordiales a todos.


    Roy Sillerico

    jueves, 24 de agosto de 2017 19:35

Respuestas

  • Ahora creo entendí tu consulta. Quieres ejecutar el select por cada una de las bases de datos de usuario:

    EXECUTE master.sys.sp_MSforeachdb 'USE [?]; SELECT * FROM SYS.TABLES'

    Espero sirva.

    Saludos.


    Mariano K.

    viernes, 25 de agosto de 2017 12:24

Todas las respuestas

  • Hola que tal.

    Para traer información de todos los objetos :

    SELECT * 
    FROM sys.objects 
    WHERE schema_id = SCHEMA_ID('dbo')
    

    Para ver las columnas de todas las tablas:

    SELECT TABLE_SCHEMA ,
           TABLE_NAME ,
           COLUMN_NAME ,
           ORDINAL_POSITION ,
           COLUMN_DEFAULT ,
           DATA_TYPE ,
           CHARACTER_MAXIMUM_LENGTH ,
           NUMERIC_PRECISION ,
           NUMERIC_PRECISION_RADIX ,
           NUMERIC_SCALE ,
           DATETIME_PRECISION
    FROM   INFORMATION_SCHEMA.COLUMNS;

    Seguramente algún otro miembro del foro, tendrá scripts mas detallados haciendo joins entre estas vistas pero para empezar espero que sirva.

    Saludos


    Mariano K.

    jueves, 24 de agosto de 2017 20:04
  • Ha caray, ahora ya no se si yo estoy mal o la respuesta proporcionada, bueno en mi pregunta indique:

    select * from sys.tables, pero el problema es que me lista solamente las tablas de la base de datos del usuario, yo necesito que me lista de todas las bases de datos

    Entonces me encuentro en el dilema de que las consultas que hago al SYS.[.....], me devuelven los objetos pero solo de la base de datos definida en el USE, y como indique en la pregunta necesito listar todas las tablas de TODAS LAS BASES DE DATOS.


    Roy Sillerico

    jueves, 24 de agosto de 2017 20:20
  • Ahora creo entendí tu consulta. Quieres ejecutar el select por cada una de las bases de datos de usuario:

    EXECUTE master.sys.sp_MSforeachdb 'USE [?]; SELECT * FROM SYS.TABLES'

    Espero sirva.

    Saludos.


    Mariano K.

    viernes, 25 de agosto de 2017 12:24
  • Si justo algo como tu sugerencia es lo que hice, por si a alguien le sirve, es esto:

    		DECLARE @SQL NVARCHAR(4000);
    		DECLARE @PARAMETRO NVARCHAR(MAX);
    
    		SET @SQL =  N'SET @O_RESULTADO_JSON =
    					(
    						SELECT T.OBJECT_ID Id, S.NAME + ''.'' + T.NAME Nombre
    						FROM ' + @I_BASE_DE_DATOS + '.SYS.TABLES T, ' + @I_BASE_DE_DATOS + '.SYS.SCHEMAS S
    						WHERE  T.SCHEMA_ID = S.SCHEMA_ID
    						ORDER BY Text
    						FOR JSON AUTO
    					);';
    
    		SET @PARAMETRO = N'@O_RESULTADO_JSON NVARCHAR(MAX) OUTPUT';
    	
    		EXECUTE SP_EXECUTESQL @SQL, @PARAMETRO, @O_RESULTADO_JSON OUTPUT;

    Bueno, el ejemplo es para listar tablas, pero se puedo replicar a todo.

    Saludos cordiales a todos.

    viernes, 25 de agosto de 2017 23:12
  • SELECT * FROM sys.databases
    viernes, 10 de mayo de 2019 10:47