Tabla Pitagórica en Transact-SQL

Publicado: agosto 24, 2009 en Transact-SQL

Hace un tiempo me encontré con este problema en donde se necesitaba realizar una tabla pitagórica con un procedimiento almacenado en Transact-SQL.

El código para la tabla pitagórica en Transact-SQL:


--Autor: Germán Aroca
--Descripción: Generar una 
--		    tabla pitagórica con un rango que puede ir desde 0 hasta 99.

create procedure sp_tablapitagorica
@valorHasta int,
@estcod int output,
@estmsg varchar(50) output

--@valorHasta: valor final de hasta donde se generará la tabla pitagórica
--@estcod: mostrar estado 1 cuando el rango no está entre 0 y 99,
--@estmsg: mostar mensaje de rango invalido

as
begin
	declare @consultaAlter varchar(250), @consultaUpdate varchar(250),
	@resultado varchar(4), @contadorUno int, @contadorDos int, @contadorTres int,
	@nombreColumna varchar(4), @X varchar(4)
	  --@consultaAlter: es la variable que almacenará las consultas para alterar la estructura de la tabla temporal #tbl_pitagorica,
	  --@consultaUpdate: es la variable que se utiliza para almacenar la consulta de actualización de las filas,
	  --@resultado: almacena el resultado de la multiplicación, 
	  --@contadorUno: se utiliza como contador de columnas y además para inicializar el @nombreColumna, 
	  --@contadorDos: variable utilizada para insertar los valores de la columan X, además es un factor de la multiplicación,
	  --@contadorTres: variable utilizada cómo uno de los factores para multiplicar, además va relacionada con el nombre de la columna numérica,
	  --@nombreColumna: variable utilizada para nombrar las columnas, además de especificar en que columna debe ir la multiplicación, 
	  --@X: se utiliza para especificar que registro debe ser actualizado cuando se van agregando los resultados de la multiplicación
	
	create table #tbl_pitagorica (x varchar(2))

	select @contadorUno=0
	if(@valorHasta <=99 and @valorHasta>=0)
	begin
		
		set @contadorUno  = 0	
		while(@contadorUno <= @valorHasta)
		begin
			set @nombreColumna = cast(@contadorUno  as varchar(3))
			set @consultaAlter = 'alter table #tbl_pitagorica add "'+@nombreColumna+'" varchar(4)'
			exec (@consultaAlter)
			set @contadorUno  = @contadorUno  + 1
		end
		
		set @contadorDos = 0	
		while(@contadorDos<= @valorHasta)
		begin
			insert into #tbl_pitagorica (x) values(@contadorDos)
		
			set @X = cast(@contadorDos as varchar(250))

			set @contadorTres = 0
			while(@contadorTres<= @valorHasta)
			begin
				set @nombreColumna = cast(@contadorTres as varchar(250))
				set @resultado = @contadorDos * @contadorTres	
				set @consultaUpdate = 'update #tbl_pitagorica set "'+@nombreColumna+'" = '+ @resultado +' where x = '+@X
				exec (@consultaUpdate)
				
				set @contadorTres = @contadorTres + 1
			end

			set @contadorDos = @contadorDos + 1 
		end

		begin
			select * from #tbl_pitagorica 
		end

	end
	else
	begin
			select @estcod=1
			select @estmsg='Rango invalido =(, Ingrese Valores de 0 a 99 !!!'	
	end
end

--Probar el procedimiendo almacenado

declare @valorHasta int,
		@estcod int, @estmsg varchar(50)

select @valorHasta = 20


exec sp_tablapitagorica
			@valorHasta,
			@estcod output, @estmsg output

print @estcod
print @estmsg

Si se fijan sólo se muestra hasta el 20 pero el código está hecho hasta 99.
tablaPitagorica

Saludos

About these ads
comentarios
  1. gabriel a.j. dice:

    Y si quiero 85 por 4? explica como

  2. Anónimo dice:

    alguien deme la del 16

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s