Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/11/2011, 09:55
Avatar de yamiblancoc
yamiblancoc
 
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 8 meses
Puntos: 4
Información Columna autonumerica con cursor... Sql 2008

HOLA BUEN DIA... ESTOY CREANDO UNA COLUMNA CON UN CURSOR UPDATE, LO HAGO CON CURSOR PORQUE ES LO ULTIMO QUE SE ME VIENE A LA MENTE YA QUE HE INTENTADO CON BUCLE, CON IDENTITY Y YA NO SE COMO HACER...

ESTE ES MI CODIGO
AQUI CREO MI TABLA TEMPORAL DE AQUI PASA A LA TABLA FIJA, LA CREE PARA VER TODOS LOS REGISTROS Y LUEGO ACTUALIZAR LA COLUMNA comp_registro
Código:
create table #temp 
(comp_cod varchar (20), 
pres_ano int, 
comp_registro int, 
id_item varchar (200), 
ac_proy_cod varchar (50), 
ac_proy_tipo int, 
acesp_cod int, 
monto int, 
detalle varchar (50))
Aqui hago mi consulta y me traigo la informacion de mi BD's a mi #tabla
Código:
declare
@comp_cod varchar (20), 
@pres_ano int, 
@comp_registro int, 
@id_item varchar (200), 
@ac_proy_cod varchar (50), 
@ac_proy_tipo int, 
@acesp_cod int, 
@monto int, 
@detalle varchar (50),
@fin1 int


insert into #temp select 
comp_cod= 'nom'+ replicate(0,5-len(a.codnom))+convert (varchar,a.codnom),
pres_ano= a.anioa ,
comp_registro='',
from SWNOMMSSQL000002.dbo.swnompta a left OUTER JOIN dbo.swnomhmv b on a.codnom= b.codnom
where  mesa = 6
and dia between  1 and 15
and tipcon = 'A'
and anioa =2011
and frecuencia  in (2,3,7,12,16,18)
group by a.codnom, a.codcon, a.anioa
order by a.codnom, a.codcon
  
select * from  #temp
me muestra
comp_cod.................... pres_ano...........................comp_registro.. ...... mas columnas
nom00739.....................2011 ........................................ 0
nom00744.....................2011 ........................................ 0
nom00744.....................2011................. ........................ 0
nom00744.....................2011 .........................................0

aqui hago mi cursor
Código:
  
DECLARE nom_cursor cursor for
			select * from #temp
		 for update of comp_registro
		
OPEN nom_cursor
fetch next from nom_cursor into @comp_cod, @pres_ano, @comp_registro, @id_item, @ac_proy_cod, @ac_proy_tipo, @acesp_cod, @monto, @detalle

	while @@FETCH_STATUS=0 and @comp_registro = 0
            update SWNOMMSSQL000002..#temp
                  set comp_registro = @comp_registro
             where current of nom_cursor
      end
      
      FETCH next from nom_cursor into @comp_cod, @pres_ano, @comp_registro, @id_item, @ac_proy_cod, @ac_proy_tipo, @acesp_cod, @monto, @detalle
 		end
	
close nom_cursor
deallocate nom_cursor
y me quede aqui..... El hecho es que cree el cursor para que me muestre
la tabla asi
comp_cod................... pres_ano..................... comp_registro........ mas columnas
nom00739......................2011 .................................... 1
nom00744.....................2011................. .......................1ES 1 OTRA ES PORQUE ES OTRO COMP_COD
nom00744 .....................2011......................... ............. 2
nom00744...................... 2011 ..................................... 3

Cada vez que el comp_cod se diferente al que esta agregando, se inicializa el contador... no se si me explico