HOla a todos! de nuevo tengo problemas con un cursor, bueno la cuestión es que más bien necesito cambiarlo por una función o un SP que me genere lo siguiente:
Un Folio tomando el campo de sucursal + el campo Año + un consecutivo de 7 posiciones, pero esto lo necesito por cada sucursal y por cada año, es decir:
para la sucursal 0001 año 2008 --> 0001080000001 ,0001080000002,0001080000003
para la sucursal 0001 año 2009 --> 0001090000001 ,0001090000002,0001090000003...
para la sucursal 0002 año 2007 --> 0002070000001 ,0002070000002
para la sucursal 0003 año 2009 --> 0003090000001 ,0003090000002,0003090000003...
y así sucesivamente...
Lo solucione con este cursor, pero obviamente estamuy pesado por que son 1,500,000 de registros:
Código:
BEGIN TRAN
DECLARE @Sucursal INT
DECLARE @Anio INT
DECLARE Cursor1 CURSOR FOR
SELECT DISTINCT
NIdSucursal,CONVERT(INT,YEAR(DEmpeno)) Anio
FROM
Boletas
ORDER by
NIdSucursal,CONVERT(INT,YEAR(DEmpeno))
OPEN Cursor1
FETCH NEXT FROM Cursor1
INTO @Sucursal , @Anio
WHILE @@FETCH_STATUS = 0
BEGIN
CREATE TABLE #TEMPORAL
(
NIdBoleta bigint,NIdSucursal bigint,VFolio char(30),Anio bigint,NuevoFolio char(30),Consecutivo bigint
)
INSERT INTO #TEMPORAL
(NIdSucursal,NIdBoleta,VFolio,Anio,NuevoFolio,Consecutivo )
SELECT
NIdSucursal,NIdBoleta,VFolio,YEAR(DEmpeno)Anio,
(
dbo.SEM_FAGREGAR_CEROS_IZQUIERDA(NIdSucursal,4)+
dbo.SEM_FAGREGAR_CEROS_IZQUIERDA(SUBSTRING(CONVERT(VARCHAR,YEAR(DEmpeno)),3,2),2)+
dbo.SEM_FAGREGAR_CEROS_IZQUIERDA((CASE WHEN (ROW_NUMBER() OVER(ORDER BY NIdBoleta)) IS NULL THEN 1 ELSE (ROW_NUMBER() OVER(ORDER BY NIdBoleta)) END),6)
) NuevoFolio,
(ROW_NUMBER() OVER(ORDER BY NIdBoleta))Consecutivo
FROM Boletas
WHERE
NIdSucursal=@Sucursal AND
CONVERT(INT,YEAR(DEmpeno))=@Anio
ORDER BY
NIdSucursal,YEAR(DEmpeno),NIdBoleta
UPDATE
Boletas
SET
Boletas.VFolio=#TEMPORAL.NuevoFolio
FROM
#TEMPORAL
WHERE
Boletas.NIdBoleta =#TEMPORAL.NIdBoleta AND
Boletas.NIdSucursal=#TEMPORAL.NIdSucursal
DROP TABLE #TEMPORAL
FETCH NEXT FROM Cursor1
INTO @Sucursal , @Anio
END
CLOSE Cursor1
DEALLOCATE Cursor1
SELECT
NIdSucursal,YEAR(DEmpeno),NIdBoleta,VFolio
FROM
Boletas
ORDER BY
NIdSucursal,YEAR(DEmpeno),NIdBoleta
ROLLBACK TRAN