Como ya sabéis, publico de muy tarde en tarde, por lo que pido disculpas. Sin embargo el contenido que quiero poner en mi blog, es de cosecha propia.
Bueno, esta vez voy a aportar un pequeño código en SQL que nos va a permitir generar cursores, tan solo con indicar el nombre de la tabla que queremos realizar el cursor.
La motivación de realizar este pequeño código, es debido a que el equipo de desarrollo software que lidero, tarda en realizar tareas repetitivas como crear cursores, sobre todo cuando son cursores sobre tablas con un número alto de columnas.
El código es el siquiente:
declare @nombreTabla as sysname;
DECLARE @ORDINAL_POSITION AS INT,
@COLUMN_NAME AS sysname,
@DATA_TYPE AS NVARCHAR (50),
@CHARACTER_MAXIMUM_LENGTH AS INT,
@IS_NULLABLE AS VARCHAR,
@COLUMN_DEFAULT AS NVARCHAR,
@listaColumnas AS NVARCHAR (4000),
@listaVariables AS NVARCHAR (4000);
set @nombreTabla='Catalogo'
DECLARE cTable CURSOR FOR SELECT ORDINAL_POSITION,
COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH,
IS_NULLABLE,
COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @nombreTabla
ORDER BY ORDINAL_POSITION ASC;
SET @listaColumnas = '';
SET @listaVariables = '';
OPEN cTable;
-- Lectura de la primera fila del cursor
FETCH cTable INTO @ORDINAL_POSITION, @COLUMN_NAME, @DATA_TYPE, @CHARACTER_MAXIMUM_LENGTH, @IS_NULLABLE, @COLUMN_DEFAULT;
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF @listaColumnas <> ''
BEGIN
SET @listaColumnas = @listaColumnas + ',';
SET @listaVariables = @listaVariables + ',';
END
SET @listaColumnas = @listaColumnas + @COLUMN_NAME;
SET @listaVariables = @listaVariables+ '@' + @COLUMN_NAME;
IF @CHARACTER_MAXIMUM_LENGTH IS NOT NULL
BEGIN
PRINT 'DECLARE @' + @COLUMN_NAME + ' as ' + @DATA_TYPE + '(' + CONVERT (VARCHAR (10), @CHARACTER_MAXIMUM_LENGTH) + ')';
END
ELSE
BEGIN
PRINT 'DECLARE @' + @COLUMN_NAME + ' as ' + @DATA_TYPE;
END
FETCH cTable INTO @ORDINAL_POSITION, @COLUMN_NAME, @DATA_TYPE, @CHARACTER_MAXIMUM_LENGTH, @IS_NULLABLE, @COLUMN_DEFAULT;
END
PRINT ''
PRINT 'DECLARE c'+@nombreTabla+' CURSOR FOR SELECT '+ @listaColumnas+' from '+@nombreTabla;
PRINT ''
PRINT 'OPEN c'+@nombreTabla
PRINT 'FETCH c'+@nombreTabla+' INTO '+@listaVariables
PRINT ''
PRINT 'WHILE (@@FETCH_STATUS = 0)'
PRINT 'BEGIN'
PRINT ''
PRINT 'FETCH c'+@nombreTabla+' INTO '+@listaVariables
PRINT 'END'
PRINT ''
PRINT 'CLOSE c'+@nombreTabla
PRINT 'DEALLOCATE c'+@nombreTabla
-- Cierre del cursor
CLOSE cTable;
-- Liberar los recursos
DEALLOCATE cTable;
Espero que con esta aportación podáis incrementar vuestra productividad en los desarrollos.
No hay comentarios:
Publicar un comentario