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