Hola, después de mucho tiempo una nueva entrada, hoy se presento la necesidad de hacer muchos procedimientos almacenados exactamente iguales de diferentes tablas, a lo cual se me ocurrió la siguiente solución, mediante un procedimiento almacenado generar automáticamente los DDL del CRUD.En un solo procedimiento almacenado reuniré todas las transacciones. Me cuentan si tienen preguntas, funciona con sql server
--primero una variable con el nombre de la tabla a la cual le generaremos el procedimiento almacenado
SET @TABLA='aqui va el nombre de la tabla'
--Luego las variables que vamos a usar durante el proceso son:
Declare @NombreCampo as Varchar(512)
Declare @Tipo as Varchar(512)
Declare @Tamanho as Varchar(512)
DECLARE @Cadena_Insercion as NVARCHAR(2048)
DECLARE @Cadena_Variables as NVARCHAR(2048)
DECLARE @Cadena_Actualizacion AS NVARCHAR(2048)
DECLARE @Cadena_and AS NVARCHAR(2048)
--Aqui comienza el cursor que utilizaremos
Declare AutomaticTable cursor For
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM information_schema.columns WHERE table_name = @TABLA
OPEN AutomaticTable
SET @Cadena_Insercion=''
SET @Cadena_Variables=''
SET @Cadena_Actualizacion=''
SET @Cadena_and=''
Fetch Next From AutomaticTable
Into @NombreCampo, @Tipo, @Tamanho
PRINT 'CREATE PROCEDURE Proc_'+@TABLA+' as'
PRINT ' '
PRINT ' '
PRINT 'BEGIN'
PRINT ' '
PRINT ' DECLARE @ITRAN AS INT'
WHILE @@FETCH_STATUS=0
BEGIN
IF @Tamanho IS NOT NULL
BEGIN
PRINT ' DECLARE @'+ @NombreCampo+' AS '+@Tipo + '('+@Tamanho+')'
END
ELSE
BEGIN
PRINT ' DECLARE @'+ @NombreCampo+' AS '+@Tipo
END
set @Cadena_Insercion = @Cadena_Insercion + ',' + @NombreCampo
set @Cadena_Variables = @Cadena_Variables + ',@' + @NombreCampo
SET @Cadena_Actualizacion = + @Cadena_Actualizacion + @NombreCampo + '=@' + @NombreCampo + ','
SET @Cadena_and = @Cadena_and + @NombreCampo + '=@' + @NombreCampo + ' AND '
Fetch Next From AutomaticTable Into @NombreCampo, @Tipo, @Tamanho
END
set @Cadena_Insercion=SUBSTRING(@Cadena_Insercion,2,LEN(@Cadena_Insercion))
set @Cadena_Variables=SUBSTRING(@Cadena_Variables,2,LEN(@Cadena_Variables))
set @Cadena_Actualizacion=SUBSTRING(@Cadena_Actualizacion,1,LEN(@Cadena_Actualizacion)-1)
set @Cadena_and=SUBSTRING(@Cadena_and,1,LEN(@Cadena_and)-4)
PRINT ' '
PRINT 'IF @ITRAN=1'
PRINT ' BEGIN'
PRINT ' SELECT '+@Cadena_Insercion+' FROM '+@TABLA+''
PRINT ' END'
PRINT ' '
PRINT 'IF @ITRAN=2'
PRINT ' BEGIN'
PRINT ' INSERT INTO '+@TABLA+'('+@Cadena_Insercion+') VALUES (' + @Cadena_Variables + ')'
PRINT ' END'
PRINT ' '
PRINT ' '
PRINT 'IF @ITRAN=3'
PRINT ' BEGIN'
PRINT ' UPDATE '+@TABLA+' SET ' + @Cadena_Actualizacion + ' WHERE ' + @Cadena_and
PRINT ' END'
PRINT ' '
PRINT ' '
PRINT 'IF @ITRAN=4'
PRINT ' BEGIN'
PRINT ' DELETE '+@TABLA+' ' + ' WHERE ' + @Cadena_and
PRINT ' END'
PRINT ' '
PRINT 'END'
CLOSE AutomaticTable
DEALLOCATE AutomaticTable
Gracias!!! Continua con lo que haces!!! Aun después de 4 años aun es ayuda!
ResponderEliminarMuchas gracias!!
Eliminar