Scripts para crear comentarios en campos y tablas en SQL Server

--Ejemplos de uso:
--exec mer_listarComentariosCampos
--exec mer_listarComentariosTablas
--exec mer_ActualizarDescripcionCampo 'TABLA', 'CAMPO', 'DESCRIPCION'
--exec mer_ActualizarDescripcionTabla 'TABLA', 'DESCRIPCION'
--exec mer_EliminarDescripcionTabla 'TABLA'
--exec mer_EliminarDescripcionCampo 'TABLA', 'CAMPO'


USE [BASE]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mer_ListarComentariosCampos]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mer_ListarComentariosCampos]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mer_ListarComentariosTablas]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mer_ListarComentariosTablas]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mer_ActualizarDescripcionTabla]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mer_ActualizarDescripcionTabla]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mer_ActualizarDescripcionCampo]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mer_ActualizarDescripcionCampo]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mer_EliminarDescripcionTabla]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mer_EliminarDescripcionTabla]
GO

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[mer_EliminarDescripcionCampo]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[mer_EliminarDescripcionCampo]
GO


CREATE PROCEDURE [dbo].[mer_ListarComentariosCampos]
AS

DECLARE @comentarios TABLE (
       esquema sysname,
       tabla sysname,
       columna sysname,
       descripcion VARCHAR(500))


DECLARE c CURSOR FOR
       SELECT table_schema, table_name
         FROM information_schema.tables

DECLARE @s sysname, @t sysname

OPEN c
FETCH c INTO @s, @t
WHILE @@FETCH_STATUS = 0 BEGIN
    INSERT INTO @comentarios (esquema, tabla, columna, descripcion)
             SELECT @s, @t, objname, convert(varchar(500), value)
               FROM fn_listextendedproperty (N'MS_Description', N'schema', @s, N'table', @t, N'column', null);

       FETCH c INTO @s, @t
END
CLOSE c
DEALLOCATE c

INSERT INTO @comentarios (esquema, tabla, columna)
SELECT table_schema, table_name, column_name
  FROM information_schema.columns s
 WHERE NOT EXISTS
   (SELECT *
      FROM @comentarios c
     WHERE s.table_schema = c.esquema
       AND s.table_name   = c.tabla
          AND s.column_name  = c.columna)

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


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)

SELECT * from @comentarios ORDER BY tabla

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
GO
-------------------------------------------------------------------------------------------------------------

CREATE PROCEDURE [dbo].[mer_ActualizarDescripcionCampo]
-- Los parámetros son el nombre de la tabla, el nombre de la columna y la descripción
@nombre_tabla sysname = '',
@nombre_campo sysname = '',
@descripcion_campo sql_variant = ''
AS
BEGIN TRY
IF EXISTS(SELECT objname, value
                  FROM fn_listextendedproperty (N'MS_Description', N'schema', 'dbo',
 N'table', @nombre_tabla, N'column', null) WHERE objname = @nombre_campo)
EXEC sys.sp_updateextendedproperty
@name=N'MS_Description',
@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=N'MS_Description',
@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
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
GO
-------------------------------------------------------------------------------------------------------------

CREATE PROCEDURE [dbo].[mer_EliminarDescripcionCampo]
@nombre_tabla sysname = '',
@nombre_campo sysname = ''
AS
BEGIN TRY
EXEC sys.sp_dropextendedproperty
@name=N'MS_Description',
@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
GO
-------------------------------------------------------------------------------------------------------------

No hay comentarios:

Publicar un comentario