Listar comentarios de tablas y campos

Listar comentarios de las tablas

SELECT objname, CONVERT(VARCHAR(500), value)
      FROM ::FN_LISTEXTENDEDPROPERTY(N'MS_DESCRIPTION', N'USER', N'DBO', N'TABLE', NULL, NULL, NULL)
where objtype = 'TABLE'


Listar comentarios de los campos de una tabla

select 
        st.name [Table],
        sc.name [Column],
        sep.value [Description]
    from sys.tables st
    inner join sys.columns sc on st.object_id = sc.object_id
    left join sys.extended_properties sep on st.object_id = sep.major_id
                                         and sc.column_id = sep.minor_id
                                         and sep.name = 'MS_Description'                                         
    where st.name = 'Nombre de la Tabla'


    and sc.name = 'Nombre del campo'



Con stored procedures...

//crea o actualiza la propiedad MS_description, de la tabla especificada
exec mer_ActualizarDescripcionTabla 'Cliente', 'tabla de clientes de la empresa'-                          

//actualiza o crea la propiedad especificada, para el campo de la tabla especifcadas, y le pone el valor indicado
exec mer_ActualizarPropiedadCampo 'Tipo', 'Cliente', 'Nombre', 'Nombre del cliente'

//elimina la propiedad MS_description, de la tabla especificada
exec mer_EliminarDescripcionTabla 'Cliente'                                    

//elimina la propiedad que tenga el nombre especificado, del campo de la tabla especificados
exec mer_EliminarPropiedadCampo 'Tipo', 'Cliente', 'Nombre'                    

//lista los comentarios de todas las tablas
exec mer_listarComentariosTablas                                                  

//lista todas las propiedades del tipo especificado, de todos los campos de todas las tablas    
exec mer_listarPropiedadesCampos 'Tipo'                        
 
//lista el valor de una propiedad dada de un campo de una tabla.
exec mer_listarPropiedadCampo 'Tipo', 'Cliente', 'FechaNacimiento'                        



Stored procedures

--Comienzo de SPs -------------------------------------------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE PROCEDURE [dbo].[mer_ActualizarDescripcionTabla]
    -- Los parámetros son el nombre de la tabla y la descripción
    @nombre_tabla sysname = '',
    @descripcion_tabla sql_variant = ''
AS
BEGIN
    BEGIN TRY
 
        IF EXISTS (SELECT OBJNAME AS 'tabla', VALUE AS 'COMENTARIO'
                   FROM ::FN_LISTEXTENDEDPROPERTY(N'MS_DESCRIPTION', N'USER', N'DBO', N'TABLE',
                   @nombre_tabla, NULL, NULL) XP
                   WHERE XP.NAME IN (N'MS_DESCRIPTION'))

            EXEC sys.sp_updateextendedproperty
                @name=N'MS_Description',
                @value=@descripcion_tabla,
                @level0type=N'SCHEMA',
                @level0name=N'dbo',
                @level1type=N'TABLE',
                @level1name=@nombre_tabla
       ELSE
            EXEC sys.sp_addextendedproperty
                @name=N'MS_Description',
                @value=@descripcion_tabla,
                @level0type=N'SCHEMA',
                @level0name=N'dbo',
                @level1type=N'TABLE',
                @level1name=@nombre_tabla
    END TRY
    BEGIN CATCH
        SELECT
            ERROR_LINE() as ErrorLine,
            ERROR_MESSAGE() as ErrorMessage;

            PRINT 'No se pudo agregar la descripción ''' + convert(nvarchar(128),@descripcion_tabla) + '''a la tabla ' + convert(nvarchar(128),@nombre_tabla)
            PRINT 'Error Line: ' + convert(varchar(50),ERROR_LINE())
            PRINT 'ErrorMessage: ' + ERROR_MESSAGE()
            ROLLBACK TRANSACTION
    END CATCH
END


-------------------------------------------------------------------------------------------------------------

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE PROCEDURE [dbo].[mer_ActualizarPropiedadCampo]
    -- Los parámetros son el nombre de la tabla, el nombre de la columna y la descripción
    @propiedad sysname = '',
    @nombre_tabla sysname = '',
    @nombre_campo sysname = '',
    @descripcion_campo sql_variant = ''
AS
    BEGIN TRY
        IF EXISTS(SELECT objname, value
                  FROM fn_listextendedproperty (@propiedad, N'schema', 'dbo',
                  N'table', @nombre_tabla, N'column', null) WHERE objname = @nombre_campo)
            EXEC sys.sp_updateextendedproperty
                @name=@propiedad,
                @value=@descripcion_campo,
                @level0type=N'SCHEMA',
                @level0name=N'dbo',
                @level1type=N'TABLE',
                @level1name=@nombre_tabla,
                @level2type=N'COLUMN',
                @level2name=@nombre_campo
        ELSE
            EXEC sys.sp_addextendedproperty
                @name=@propiedad,
                @value=@descripcion_campo,
                @level0type=N'SCHEMA',
                @level0name=N'dbo',
                @level1type=N'TABLE',
                @level1name=@nombre_tabla,
                @level2type=N'COLUMN',
                @level2name=@nombre_campo
    END TRY
    BEGIN CATCH
        SELECT
            ERROR_LINE() as ErrorLine,
            ERROR_MESSAGE() as ErrorMessage;

            PRINT 'No se pudo agregar la descripción ''' + convert(nvarchar(128),@descripcion_campo) + '''al campo ' + convert(nvarchar(128),@nombre_campo) + ' en la tabla ' + convert(nvarchar(128),@nombre_tabla)
            PRINT 'Error Line: ' + convert(varchar(50),ERROR_LINE())
            PRINT 'ErrorMessage: ' + ERROR_MESSAGE()
            ROLLBACK TRANSACTION
    END CATCH


-------------------------------------------------------------------------------------------------------------


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE PROCEDURE [dbo].[mer_EliminarDescripcionTabla]
    @nombre_tabla sysname = ''
AS
    BEGIN TRY
        EXEC sys.sp_dropextendedproperty
            @name=N'MS_Description',
            @level0type=N'SCHEMA',
            @level0name=N'dbo',
            @level1type=N'TABLE',
            @level1name=@nombre_tabla
    END TRY
    BEGIN CATCH
        SELECT
            ERROR_LINE() as ErrorLine,
            ERROR_MESSAGE() as ErrorMessage;

            PRINT 'No se pudo agregar la descripción ''' + '''al campo ' + ' en la tabla ' + convert(nvarchar(128),@nombre_tabla)
            PRINT 'Error Line: ' + convert(varchar(50),ERROR_LINE())
            PRINT 'ErrorMessage: ' + ERROR_MESSAGE()
            ROLLBACK TRANSACTION
    END CATCH



-------------------------------------------------------------------------------------------------------------


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

 
CREATE PROCEDURE [dbo].[mer_EliminarPropiedadCampo]
    @propiedad sysname = '',
    @nombre_tabla sysname = '',
    @nombre_campo sysname = ''
AS
    BEGIN TRY
        EXEC sys.sp_dropextendedproperty
            @name=@propiedad,
            @level0type=N'SCHEMA',
            @level0name=N'dbo',
            @level1type=N'TABLE',
            @level1name=@nombre_tabla,
            @level2type=N'COLUMN',
            @level2name=@nombre_campo
    END TRY
    BEGIN CATCH
        SELECT
            ERROR_LINE() as ErrorLine,
            ERROR_MESSAGE() as ErrorMessage;

            PRINT 'No se pudo agregar la descripción ''' + '''al campo ' + convert(nvarchar(128),@nombre_campo) + ' en la tabla ' + convert(nvarchar(128),@nombre_tabla)
            PRINT 'Error Line: ' + convert(varchar(50),ERROR_LINE())
            PRINT 'ErrorMessage: ' + ERROR_MESSAGE()
            ROLLBACK TRANSACTION
    END CATCH





-------------------------------------------------------------------------------------------------------------

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE PROCEDURE [dbo].[mer_ListarComentariosTablas]
AS

DECLARE @comentarios TABLE(tabla sysname, descripcion VARCHAR(500))
INSERT INTO @comentarios (tabla, descripcion)
SELECT objname, CONVERT(VARCHAR(500), value)
      FROM ::FN_LISTEXTENDEDPROPERTY(N'MS_DESCRIPTION', N'USER', N'DBO', N'TABLE', NULL, NULL, NULL)
INSERT INTO @comentarios (tabla)
  SELECT table_name
    FROM information_schema.tables
   WHERE table_name NOT IN
      (select tabla FROM @comentarios)
   AND TABLE_TYPE <> 'VIEW'

SELECT * from @comentarios ORDER BY tabla



-------------------------------------------------------------------------------------------------------------

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


CREATE PROCEDURE [dbo].[mer_ListarPropiedadesCampos]
    @propiedad sysname = ''
AS

DECLARE @propiedades TABLE (
       esquema sysname,
       tabla sysname,
       columna sysname,
       valor VARCHAR(500))


DECLARE c CURSOR FOR
       SELECT table_schema, table_name
         FROM information_schema.tables
       WHERE table_type != 'VIEW'

DECLARE @s sysname, @t sysname

OPEN c
FETCH c INTO @s, @t
WHILE @@FETCH_STATUS = 0 BEGIN
    INSERT INTO @propiedades (esquema, tabla, columna, valor)
             SELECT @s, @t, objname, convert(varchar(500), value)
               FROM fn_listextendedproperty (@propiedad, N'schema', @s, N'table', @t, N'column', null);
             
       FETCH c INTO @s, @t
END
CLOSE c
DEALLOCATE c

INSERT INTO @propiedades (esquema, tabla, columna)
SELECT table_schema, table_name, column_name
  FROM information_schema.columns s
 WHERE table_name IN
                (SELECT table_name
                 FROM information_schema.tables
     where TABLE_TYPE <> 'VIEW')
 AND NOT EXISTS
   (SELECT *
      FROM @propiedades c
     WHERE s.table_schema = c.esquema
       AND s.table_name = c.tabla
          AND s.column_name = c.columna)

SELECT *
  FROM @propiedades
 ORDER BY esquema, tabla, columna


-------------------------------------------------------------------------------------------------------------


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

CREATE PROCEDURE [dbo].[mer_ListarPropiedadCampo]
    @propiedad sysname = '',
    @tabla sysname = '',
    @campo sysname = ''
AS

DECLARE @propiedades TABLE (
       esquema sysname,
       tabla sysname,
       columna sysname,
       valor VARCHAR(500))


DECLARE c CURSOR FOR
       SELECT table_schema, table_name
         FROM information_schema.tables
       WHERE table_type != 'VIEW' and
table_name = @tabla

DECLARE @s sysname, @t sysname

OPEN c
FETCH c INTO @s, @t
WHILE @@FETCH_STATUS = 0 BEGIN
    INSERT INTO @propiedades (esquema, tabla, columna, valor)
             SELECT @s, @t, objname, convert(varchar(500), value)
               FROM fn_listextendedproperty (@propiedad, N'schema', @s, N'table', @tabla, N'column', @campo);
             
       FETCH c INTO @s, @t
END
CLOSE c
DEALLOCATE c

select *
from @propiedades

No hay comentarios:

Publicar un comentario