Ayuda con un cursor Por Favor
Publicado por Marco (1 intervención) el 27/06/2010 01:10:30
Hola amigos, tengo la siguiente consulta:
tengo una tabla que debe confirmar datos mensualmente
Ejemplo:
TABLA PERSONAS_NUEVAS
cod nombre edad
1-v Jose 18
2-y Felipe 24
6-h Martin 31
9-m Lucia 27
.
.
TABLA PERSONAS_ANTIGUAS
cod ver nombre edad
1 v Jose 18
6 h Martin 31
9 m Lucia 28
.
.
Necesito un procedimiento almacenado, que me permita hacer 3 cosas:
1.- Insertar solo los registros que no esten en la tabla "PERSONAS_AnTIGUAS" desde la tabla "PERSONAS_NUEVAS" (En el ejemplo: 2-y, Felipe,24).
2.- Si la persona de la tabla "PERSONAS_NUEVAS" se encuentra en la tabla "PERSONAS_ANTIGUAS" actualizar la edad, si esta ya no es igual.
3.- Separar el campo "cod" de la tabla "PERSONAS_NUEVAS" en los 2 campos de la tabla "PERSONAS_antigua" (campos: "cod" y "ver").
Estoy tratando de hacerlo con un cursor, pero mi nula experiencia y conocimiento en SQL, no me ha dejado entender como poder hacerlo.
estuve tratando de estructurar un cursor segun algunos tutoriales q visto, creo q el insertar "personas nuevas" separando el campo "cod" en 2 seria asi:
ALTER PROCEDURE [dbo].[TraspasoDeDatos]
AS
BEGIN
DECLARE @cod AS VARCHAR (50)
DECLARE @Ncod AS int
DECLARE @Nver AS VARCHAR (1)
DECLARE @nombre AS VARCHAR (50)
DECLARE @edad
DECLARE traspaso_personas cursor for
SELECT [codigo]
,[nombre]
,[edad]
FROM personas_nuevas
OPEN traspaso_personas
FETCH next from traspaso_personas
INTO @cod,@nombre,@edad
while @@fetch_status = 0
begin
fetch next from traspaso_personas
INTO @cod,@nombre,@edad
SET @Ncod=CONVERT(INT,SUBSTRING(@cod,0,CHARINDEX('-', @cod)))
SET @Nver= SUBSTRING (@cod,CHARINDEX('-', @cod)+1,LEN(@cod))
INSERT INTO personas_antiguas (id_cod,verif,nombre,edad) VALUES (@Ncod,@Nver,nombre,@edad)
end
close traspaso_personas
deallocate traspaso_personas
END
END
Ahora lo que no se me ocurre como hacerlo, es que solo inserte cuando las "personas nuevas" no se encuentren en la tabla "personas antiguas" y ademas, que si se encuentra "la personas nuevas" en la tabla "personas antiguas" pero la edad ya cambio, que actualice, el registro.
espero se entienda y puedan ayudarme, estoy un tanto complicado, por q no se nada de SQL, se entiede que todo se trata de practica, y es lo que me hace falta, son muchas tablas que tengo que hacer el mismo proceso, asi que teniendo este ejemplo, ya tendria el metodo para utilizarlas en las siguientes.
Saludos a todos y gracias de antemano por su atencion.
tengo una tabla que debe confirmar datos mensualmente
Ejemplo:
TABLA PERSONAS_NUEVAS
cod nombre edad
1-v Jose 18
2-y Felipe 24
6-h Martin 31
9-m Lucia 27
.
.
TABLA PERSONAS_ANTIGUAS
cod ver nombre edad
1 v Jose 18
6 h Martin 31
9 m Lucia 28
.
.
Necesito un procedimiento almacenado, que me permita hacer 3 cosas:
1.- Insertar solo los registros que no esten en la tabla "PERSONAS_AnTIGUAS" desde la tabla "PERSONAS_NUEVAS" (En el ejemplo: 2-y, Felipe,24).
2.- Si la persona de la tabla "PERSONAS_NUEVAS" se encuentra en la tabla "PERSONAS_ANTIGUAS" actualizar la edad, si esta ya no es igual.
3.- Separar el campo "cod" de la tabla "PERSONAS_NUEVAS" en los 2 campos de la tabla "PERSONAS_antigua" (campos: "cod" y "ver").
Estoy tratando de hacerlo con un cursor, pero mi nula experiencia y conocimiento en SQL, no me ha dejado entender como poder hacerlo.
estuve tratando de estructurar un cursor segun algunos tutoriales q visto, creo q el insertar "personas nuevas" separando el campo "cod" en 2 seria asi:
ALTER PROCEDURE [dbo].[TraspasoDeDatos]
AS
BEGIN
DECLARE @cod AS VARCHAR (50)
DECLARE @Ncod AS int
DECLARE @Nver AS VARCHAR (1)
DECLARE @nombre AS VARCHAR (50)
DECLARE @edad
DECLARE traspaso_personas cursor for
SELECT [codigo]
,[nombre]
,[edad]
FROM personas_nuevas
OPEN traspaso_personas
FETCH next from traspaso_personas
INTO @cod,@nombre,@edad
while @@fetch_status = 0
begin
fetch next from traspaso_personas
INTO @cod,@nombre,@edad
SET @Ncod=CONVERT(INT,SUBSTRING(@cod,0,CHARINDEX('-', @cod)))
SET @Nver= SUBSTRING (@cod,CHARINDEX('-', @cod)+1,LEN(@cod))
INSERT INTO personas_antiguas (id_cod,verif,nombre,edad) VALUES (@Ncod,@Nver,nombre,@edad)
end
close traspaso_personas
deallocate traspaso_personas
END
END
Ahora lo que no se me ocurre como hacerlo, es que solo inserte cuando las "personas nuevas" no se encuentren en la tabla "personas antiguas" y ademas, que si se encuentra "la personas nuevas" en la tabla "personas antiguas" pero la edad ya cambio, que actualice, el registro.
espero se entienda y puedan ayudarme, estoy un tanto complicado, por q no se nada de SQL, se entiede que todo se trata de practica, y es lo que me hace falta, son muchas tablas que tengo que hacer el mismo proceso, asi que teniendo este ejemplo, ya tendria el metodo para utilizarlas en las siguientes.
Saludos a todos y gracias de antemano por su atencion.
Valora esta pregunta
0