
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