Ver Mensaje Individual
  #8 (permalink)  
Antiguo 08/02/2007, 10:50
daniel00
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 18 años, 3 meses
Puntos: 8
Re: ayudenme porfas guardar registros

Hola Diana.

Pense que funcionaría creando una tabla temporal con un campo identity de esa manera, pero ya veo que no.

Entonces hay que usar la opción de los cursores, te dejo reescrito y explicado tu SP, espero que solucione tu problema, recuerda que no esta probado y que segurmante tendrás que hacer unos ajustes.

Código:
CREATE PROCEDURE dbo.ABACTESTATUSMERCSINMOVTOPERIODO
@OPCION INT,
@PERIODO INT,
@USUARIO INT

AS

DECLARE @EST INT
DECLARE @IdHistEst int
DECLARE @IDLGS int 
DECLARE @ACT INT
--DECLARE cursinmovto CURSOR FOR

--OPCION 1.. TRIMESTRE, 2.. SEMESTRE, 3...ANUAL


IF @OPCION=1
BEGIN

SELECT @EST=9
END 
IF @OPCION=2
BEGIN

SELECT @EST=8
END
IF @OPCION=3
BEGIN

SELECT @EST=7
END




BEGIN TRAN SINMOVTO


SELECT @ACT=0

-----------------------------------------------------------------------------------------
DECLARE @idlgs int ---HAY QUE CHACAR BIEN EL TIPO DE DATO DE ACUERDO AL CAMPO IDLGS

-- DECLARAMOS CURSOR
DECLARE cursinmovto CURSOR FOR
SELECT IDLGS as IDLGS 
FROM SECUENCIAS
WHERE
ANIOHASTA=@PERIODO
AND ESTATUS<>@EST

-- ABRIMOS CURSOR 
OPEN cursinmovto

-- AVANZAMOS AL PRIMER ELEMENTO Y ASIGNAMOS EL CAMPO A UNA VARIBALE ( .. INTO ...)
FETCH NEXT FROM cursinmovto
INTO @idlgs

-- CICLO, VERIFICAMOS QUE NO ESTAMOS EN EL FINAL   ... @@FETCH_STATUS...
WHILE @@FETCH_STATUS = 0
BEGIN

	-- obtenemos el máximo valor en ABSECHISTORIAESTATUS.
	SELECT @IdHistEst=MAX (IdHistEst) FROM ABSECHISTORIAESTATUS

	-- insertamos el registro.
	INSERT INTO ABSECHISTORIAESTATUS 
	(IdHistEst, IDLGS, ESTATUSACT, OBSERVACIONES, FECHA, IDUSUARIO) 
	VALUES ( @IdHistEst+1, @idlgs, @EST , 'ACT. 1.4.1.16 ' , GETDATE() ,@USUARIO )
	

	-- AVANZAMOS AL SIGUIENTE ELEMENTO Y ASIGNAMOS EL CAMPO A UNA VARIBALE ( .. INTO ...)
	FETCH NEXT FROM cursinmovto
	INTO @idlgs
END 

-- CERRAMOS Y LIBERAMOS EL CURSOR.
CLOSE cursinmovto
DEALLOCATE cursinmovto

-----------------------------------------------------------------------------------------------


SELECT @ACT=COUNT(*)
FROM SECUENCIAS
WHERE
ANIOHASTA=@PERIODO
AND ESTATUS<>@EST

UPDATE SECUENCIAS
SET ESTATUS=@EST
FROM SECUENCIAS
WHERE
IDLGS IN (SELECT IDLGS 
FROM SECUENCIAS
WHERE
ANIOHASTA=@PERIODO)
AND ESTATUS<>@EST


SELECT @ACT

COMMIT TRAN SINMOVTO

RETURN


Por cierto cambiaste varios nombre de campos de algunas tablas, respecto de tu primer post, y como que me confundi.

Saludos y espero te sea de utlidad.