febrero 18, 2012

Tabla Variable en sustitución al uso de un Cursor en SQL Server

/*cursor con tabla variable*/
declare @TablaVariableEmpleado table (
     id_Table int  identity(1,1) not null,--El valor semilla es el que nos permite obtener el valor consecutivo de 1 en 1 para poder iterar
     Empleado varchar(50) not null,
     Sueldo int not null
     )


declare @contador smallint --Contendrá el número de registros de la variable tabla
,@EmpleadoSueldoActual varchar(50)

--llenamos la tabla variable, con un query
--Insert into @TablaVariableEmpleado
--    select  Nombre, Sueldo
--    From Empleado
--    where sueldo <= 1000
   
    --llenado manual para caso de ejemplo (Empleado, Sueldo)
    INSERT INTO @TablaVariableEmpleado
    VALUES ('JUAN', 1000),
           ('JOSE',1200),
           ('MARIA',1500)


-- Extraemos el nº de registros que contiene lal tabla temporal
set @contador = isnull((Select count(*) From @TablaVariableEmpleado),0)
--SELECT @contador

-- Mientras tenga Datos …
While (@contador > 0)
Begin

    --Extraigo el identificador del campo que vamos a necesitar de acuerdo al contador que itera.
    Select @EmpleadoSueldoActual  = Empleado + ' sueldo actual: $ ' +  CONVERT(varchar(10), Sueldo)
    from @TablaVariableEmpleado
    where id_Table = @contador
   
    --mostrar valor extraido de la tabla variable de acuerdo al contador que itera.
    print @EmpleadoSueldoActual

    -- Operaciones a realizar cuando estamos recorriendo la tabla.
    --aumentar $100 al sueldo del empleado
    update @TablaVariableEmpleado
    set Sueldo = Sueldo +100
    where id_Table = @contador

    --Leemos el siguiente.
    Set @contador = @contador - 1

End--while

--mostrar resultado del procesamiento
select * from @TablaVariableEmpleado