11 may 2012

SQL Server Tip: La alternativa a los cursores.

La alternativa a usar cursores es usar tablas temporales.

--Variable de tipo tabla
DECLARE @tmp_empleados TABLE (
  id               INT IDENTITY (1, 1)
  ,nss             INT
  ,nombre_empleado VARCHAR(50))

--Se insertan los datos provenientes de empleados
INSERT INTO @tmp_empleados
SELECT nss
       ,nombre_empleado
FROM   empleados

--Variables con los mimsmos nombres
DECLARE @id              INT,
        @nss             INT,
        @nombre_empleado VARCHAR(50)
--Variables para el ciclo
DECLARE @totalregistos INT,
        @icontador     INT

SET @icontador = 1

SELECT @totalregistos = Count(*)
FROM   @tmp_empleados

--Iniciamos el ciclo
WHILE @icontador <= @totalregistos
  BEGIN
      SELECT @nss = nss
             ,@nombre_empleado = nombre_empleado
      FROM   @tmp_empleados
      WHERE  id = @icontador

      --se hacen las operaciones necesarias con los valores tomados del registro
      --y se va barriendo la tabla hasta el final
      SET @icontador=@icontador + 1
  END 


No hay comentarios.:

Publicar un comentario