SQL Server - Ayuda con un cursor Por Favor

   
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con un cursor Por Favor

Publicado por Juanma Cruz (59 intervenciones) el 28/06/2010 12:20:51
Algo como esto debería funcionar

----- ESTO PARA ACTUALIZAR LOS EXISTENTES
Update Personas_Antiguas set edad= Personas.edad from Select * from Personas_nuevas join Personas_antiguas on Personas_Nuevas.cod= Personas_Antiguas.Cod+'-'+Personas_Antiguas.ver

---- Y LUEGO ESTO PARA LOS NUEVOS, CONSIDERANDO
--- QUE EL CAMPO VER HASTA 20 CARACTERES
Insert into Personas_Antiguas select substring( codigo, 1, charindex( cod, '-')-1 ) as codigo, substring( codigo, charindex( cod, '-')+1, 20 ) as ver, nombre, edad from Personas__Nuevas where Personas_nuevas.codigo not in ( select cod+'-'+ver from personas_antiguas ) and
charindex( personas_nuevas.cod, '-')<>0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar