Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

ayudenme porfas guardar registros

Estas en el tema de ayudenme porfas guardar registros en el foro de SQL Server en Foros del Web. miren tengo este kuery @OPCION INT, @USUARIO INT, @FECHAINI DATETIME, @FECHAFIN DATETIME AS DECLARE @EST INT DECLARE @ACT INT DECLARE @IDLGS as int DECLARE @IdHistEst ...
  #1 (permalink)  
Antiguo 06/02/2007, 17:47
Avatar de dianatorres  
Fecha de Ingreso: diciembre-2006
Mensajes: 26
Antigüedad: 17 años, 5 meses
Puntos: 0
ayudenme porfas guardar registros

miren tengo este kuery
@OPCION INT,
@USUARIO INT,
@FECHAINI DATETIME,
@FECHAFIN DATETIME
AS



DECLARE @EST INT
DECLARE @ACT INT
DECLARE @IDLGS as int
DECLARE @IdHistEst AS INT

--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
Miren en esta parte yo almaceno todos los idlgs en la variable a @IDLGS
SELECT @IDLGS=IDLGS
FROM SECUENCIAS
WHERE FECHAULTIMOMOVEXI BETWEEN @FECHAINI AND @FECHAFIN

SELECT @IdHistEst=MAX (IdHistEst) FROM ABSECHISTORIAESTATUS



BEGIN

Mi problema es este que al momento de actualizar solo lo hace en el ultimo registo me esplico @IDLGS tiene 2,5,23 por dar un ejemplo en el unico registro que me actualiza es en el ultimo en el caso de "23" es el unico registro que me actualiza el estatus , no se como poder actualizar todos los registros que me traiga el idlgs
UPDATE SECUENCIAS
SET ESTATUS=@EST
FROM SECUENCIAS
WHERE
IDLGS = @IDLGS <---aqui solo me actualiza solo un registro el ultimo
AND ESTATUS<>@EST

INSERT INTO ABSECHISTORIAESTATUS (IdHistEst, IDLGS, ESTATUSACT, OBSERVACIONES, FECHA, IDUSUARIO) Values (@IdHistEst +1 ,@idlgs,@EST,'ACT. 1.4.1.16 ',GETDATE(),@USUARIO)

ayuda porfavor, es muy urgente !!! casi de vida o muerte
  #2 (permalink)  
Antiguo 06/02/2007, 18:18
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: ayudenme porfas guardar registros

Hola Diana.

No entendi mucho, pero creo que uno de tus errores es el siguiente:

En la parte que dice:
Código:
Miren en esta parte yo almaceno todos los idlgs en la variable a @IDLGS 
SELECT @IDLGS=IDLGS 
FROM SECUENCIAS
WHERE FECHAULTIMOMOVEXI BETWEEN @FECHAINI AND @FECHAFIN
Sólo estas guardando un valor entero, no varios, es sólo UNO.

Y cuando la usas en el update pues sólo actualiza ese valor.

-----------------------------------
Intenta lo siguiente, si lo que esta fallando es el update:
Código:
UPDATE SECUENCIAS
SET ESTATUS=@EST
FROM SECUENCIAS
WHERE
IDLGS IN (SELECT IDLGS 
FROM SECUENCIAS
WHERE FECHAULTIMOMOVEXI BETWEEN @FECHAINI AND @FECHAFIN)
AND ESTATUS<>@EST
Saludos y suerte!!
  #3 (permalink)  
Antiguo 06/02/2007, 19:43
Avatar de dianatorres  
Fecha de Ingreso: diciembre-2006
Mensajes: 26
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: ayudenme porfas guardar registros

NO PUES SI ME SALIO
AHORA TENGO OTRA PREGUNTA TODO ME LO ACTUALIZA EN LA TABLA DE SECUENCIAS

PERO AL MISMO TIEMPO AL FINAL TIENE QUE INSERTARLO A UNA TABLA ABSECHISTORIAESTATUS DONDE SE VA TENER TODO EL REGISTRO DE LOS QUE ACTUALIZE

INSERT INTO ABSECHISTORIAESTATUS (IdHistEst, IDLGS, ESTATUSACT, OBSERVACIONES, FECHA, IDUSUARIO) Values (@IdHistEst +1 ,@idlgs,@EST,'ACT. 1.4.1.16 ',GETDATE(),@USUARIO)
AHI COMO LE PUEDO HACER PARA QUE ME INSERTE DIGAMOS LOS TRES REGISTROS?
PORQUE EN ESTA MISMA SOLO ME INSERTA EL ULTIMO ?

PLIS AYUDAME
  #4 (permalink)  
Antiguo 07/02/2007, 10:21
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: ayudenme porfas guardar registros

Hola Diana.

Espero que lo siguiente que escribo te funcione, ya que desconozco los datos y que es lo que exactamente se debe insertar( es una sola sentencia insert-select):
Código:
INSERT INTO 
ABSECHISTORIAESTATUS (IdHistEst, IDLGS, ESTATUSACT, OBSERVACIONES, FECHA, IDUSUARIO) 
SELECT @IdHistEst +1 , IDLGS , @EST, 'ACT. 1.4.1.16 ',GETDATE(),@USUARIO
FROM SECUENCIAS
WHERE FECHAULTIMOMOVEXI BETWEEN @FECHAINI AND @FECHAFIN
-------------------------------------
Y la razón por la cual sólo te inserta un registro es la misma que para el UPDATE.

Saludos y suerte!!

Última edición por daniel00; 07/02/2007 a las 10:22 Razón: Agregar Info...
  #5 (permalink)  
Antiguo 07/02/2007, 17:21
Avatar de dianatorres  
Fecha de Ingreso: diciembre-2006
Mensajes: 26
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: ayudenme porfas guardar registros

hola lo que pasa es esto?

mira no me lo quiere insertar en la tabla absechistoria estatus porque
IdHistEst es unico y pues con la consulta pasada me quiere inestrar todos los registros con el mismo IdHistEst en los 10 registros y ahi es donde me truena

necesito guardar todos esos resultados actualizados pero ..que el IdHistEst se vaya incrementando
me dicen que use cursores para irlos recorriendo pero no se como hacerlo
me podrias ayudar DANIEL
  #6 (permalink)  
Antiguo 07/02/2007, 18:09
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: ayudenme porfas guardar registros

Hola Diana.

A ver intenta esto.
Código:
-- Primero lo metemos a una tabla temporal
SELECT Identity(int, @IdHistEst ,1) AS IdRow , IDLGS as IDLGS , @EST as EST, 'ACT. 1.4.1.16 ' as DESC, GETDATE() as Fecha ,@USUARIO as User
INTO #tmpSec
FROM SECUENCIAS
WHERE FECHAULTIMOMOVEXI BETWEEN @FECHAINI AND @FECHAFIN

-- Insertamos registros
INSERT INTO 
ABSECHISTORIAESTATUS (IdHistEst, IDLGS, ESTATUSACT, OBSERVACIONES, FECHA, IDUSUARIO) 
SELECT IdRow, IDLGS , EST, DESC, Fecha  , User
FROM #tmpSec
WHERE FECHAULTIMOMOVEXI BETWEEN @FECHAINI AND @FECHAFIN

-- borramos tabla temporal.
DROP TABLE #tmpSec
Pero ahora el problema es la concurrencia, la cual podemos evitar usando BEGIN TRAN, COMMIT TRAN. Para lo cual debes de "encerrar" todo el código de tu SP entre estas dos sentencias, por ejemplo:

Código:
CREATE PROC  ....
...
AS
BEGIN TRAN
...
....
...  Todo tu código
...
..
COMMIT TRAN

Espero que esto solucione tu problema.

Saludos y suerte!!
  #7 (permalink)  
Antiguo 07/02/2007, 19:23
Avatar de dianatorres  
Fecha de Ingreso: diciembre-2006
Mensajes: 26
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: ayudenme porfas guardar registros

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 @IdHistEst=MAX (IdHistEst) FROM ABSECHISTORIAESTATUS
SELECT @ACT=0



--Identity(int, 1 ,1)






SELECT @IdHistEst AS IdRow , IDLGS as IDLGS , @EST as EST, 'ACT. 1.4.1.16 ' as Descripcion, GETDATE() as Fecha ,@USUARIO as Usuario
INTO #tmpSec
FROM SECUENCIAS
WHERE
ANIOHASTA=@PERIODO
AND ESTATUS<>@EST

INSERT INTO
ABSECHISTORIAESTATUS (IdHistEst, IDLGS, ESTATUSACT, OBSERVACIONES, FECHA, IDUSUARIO)
SELECT IdRow, IDLGS , EST, Descripcion, Fecha , Usuario
FROM #tmpSec
WHERE
ANIOHASTA=@PERIODO
AND ESTATUS<>@EST


IF @@ERROR <> 0
BEGIN
SELECT -1
COMMIT TRAN SINMOVTO
RETURN
END


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





IF @@ERROR <> 0
BEGIN
SELECT -1
ROLLBACK TRAN SINMOVTO
RETURN
END



DROP TABLE #tmpSec
SELECT @ACT
COMMIT TRAN SINMOVTO
RETURN


mira la verdad hice esto no se si este bien porque fijate que intente con el
identity (int ,@IdHistEst ,1) no me funciono me marcaba un error

me decia que habia una syntaxis incorrecta.

bueno hice el stored con el commit tran pero tambien me marca estos errores

al momento de correrlo en el query analizer


(0 filas afectadas)

Servidor: mensaje 207, nivel 16, estado 3, procedimiento ABACTESTATUSMERCSINMOVTOPERIODO, línea 70
Invalid column name 'ANIOHASTA'.
Servidor: mensaje 207, nivel 16, estado 1, procedimiento ABACTESTATUSMERCSINMOVTOPERIODO, línea 70
Invalid column name 'ESTATUS'.
Servidor: mensaje 266, nivel 16, estado 1, procedimiento ABACTESTATUSMERCSINMOVTOPERIODO, línea 124
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 39, current count = 40.

ahi si que no se si lo plantee mal todo .....
ayudame ya lo ultimo plis
  #8 (permalink)  
Antiguo 08/02/2007, 10:50
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 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.
  #9 (permalink)  
Antiguo 08/02/2007, 13:35
Avatar de dianatorres  
Fecha de Ingreso: diciembre-2006
Mensajes: 26
Antigüedad: 17 años, 5 meses
Puntos: 0
De acuerdo Re: ayudenme porfas guardar registros

muchas gracias Daniel me funciono perfectamente


y si me ayudaste cañon sali de mi problema no sabes cuanto te lo agradezxo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:02.