SQL - QUE ESTA MAL???

 
Vista:

QUE ESTA MAL???

Publicado por GABYLU (16 intervenciones) el 19/09/2002 20:44:53
estoy pasando los valores de un tabla a otra pero solo me trae el ultimo registro.

SELECT @ID=CODIGO,@DESC=DESCRIPCION
FROM ADN

if rowcount > 0
goto ejecuta

EJECUTA:

begin
insert into local(codigo,descripcion)
values(@ID,@DESC)

PERO DE LA TABLA ADN SOLO TOMA EL ULTIMO VALOR DE 5 QUE EXISTEN Y LO INSERTA EN LA TABLA LOCAL.
NECESITO QUE INSERTE LOS CINCO DATOS? QUE ESTA PASANDO.

GRACIAS
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:QUE ESTA MAL???

Publicado por Victor (11 intervenciones) el 19/09/2002 21:24:55
Podes combinar directamente el SELECT e INSERT. Algo así:
INSERT INTO local(codigo, descripcion) SELECT codigo, descripcion FROM adn

Creo que te esta tomando solo el ultimo registro porque lo que se queda en tu variable son datos del ultimo registro nomas, y si queres hacerlo de esa manera, tenes que crear un cursor que el SELECT y hacer un FETCH para hacer el INSERT por cada registro devuelto.

Espero que te haya servido.

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

RE:QUE ESTA MAL???

Publicado por GABYLU (16 intervenciones) el 19/09/2002 22:00:17
GRACIAS.
OYE VIC PODRIAS PONER UN EJEMPLO DE COMO HACER UN FETCH.

CUIDATE MUCHO
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

RE:QUE ESTA MAL???

Publicado por Islas, Isaías (5072 intervenciones) el 19/09/2002 22:09:59
Con tu permiso Vic

DECLARE @MyCursorOpen AS CURSOR,
@IDEmpleado INT, @NombreEmpleado VARCHAR(50)

SET @MyCursorOpen = CURSOR FOR
SELECT ID, NAME FROM EMPLEADOS WHERE DEPTO = 4505

OPEN @MyCursorOpen
IF @@cursor_rows <> 0
BEGIN
FETCH NEXT FROM @MyCursorOpen into @IDEmpleado , @NombreEmpleado
SELECT @IDEmpleado, @NombreEmpleado
--- Procesos con esta información
FETCH NEXT FROM @MyCursorOpen into @IDEmpleado , @NombreEmpleado
END
END
CLOSE @MyCursorOpen
DEALLOCATE @MyCursorOpen

*************************************************Saludos
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

RE:QUE ESTA MAL???

Publicado por GABYLU (16 intervenciones) el 19/09/2002 22:33:05
GRACIAS ISAIAS , SOLO UNA PREGUNTA COMO HAGO EL INSERT DE LOS REGISTROS DE UNA TABLA A OTRA CON EL FETCH.

ENTIENDO LO DEL CURSOR. CORRIGEME SI ME EQUIVOCO.

CREATE PROCEDURE AS

DECLARE
@cursorx AS CURSOR, 'DECLARO EL CURSOR
@ID INT,
@DESC VARCHAR(20)

AHORA INICIO EL CURSOR SOBRE LA TABLA DE ESTA FORMA

SET @cursorx=CURSOR FOR
SELECT @ID=codigo, @DESC=descripcion
from ADN.

OPEN CURSOR

if @@countrows <>0
begin

AHORA NECESITO HACER EL INSERT DE TODOS LOS REGISTROS QUE ESTA LEYENDO EL CURSON A UNA NUEVA TABLA.

FETCH NEXT FROM ??????
NO SE COMO SE USA.

SALUDOS TODOS. SON MUY LINDOS POR AYUDARME.¡¡¡¡¡¡


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

RE:QUE ESTA MAL???

Publicado por Islas, Isaías (5072 intervenciones) el 19/09/2002 22:58:25
Hola GabyLu

Oye su select no tiene un Where

SELECT @ID=codigo, @DESC=descripcion
from ADN

Por lo que NO NECESITAS un cursor, hazlo así:

INSERT INTO MyOtraTabla
SELECT codigo, descripcion from ADN

Al ejecutar esta instruccion TODOS los registros de ADN, estaran en MyOtraTabla.

Ahora, si no existe MyOtraTabla y la quieres crear

SELECT codigo, descripcion INTO MyOtraTabla from ADN

Saludos.

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

RE:QUE ESTA MAL???

Publicado por GabyLu (16 intervenciones) el 19/09/2002 23:04:09
SI TIENE UN WHERE LO QUE PASA ES QUE NO LO PUSE ESTE ES MI CODIGO.

CREATE PROCEDURE CONSULTA1 AS
DECLARE
@id int,
@desc varchar(20)

DECLARE cusrsorx CURSOR FOR
SELECT codigo,descripcion
from ADN

OPEN cursorx

fetch cursorx into @id,@desc

WHILE (@@FETCH_STATUS <> -1)
begin

insert into local(codigo,descripcion)
values(@id,@desc)

end

close cursorx
Deallocate cursorx
GO

PERO ME MANDA ESTE ERROR

Msg 16916, Level 16, State 1
A cursor with the name 'cursorx' does not exist

QUE ESTA PASANDO
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

RE:QUE ESTA MAL???

Publicado por GabyLu (16 intervenciones) el 19/09/2002 23:07:27
MMMM PARECE QUE AL DECLARAR EL CURSOR ESTA MAL YA LO ESTOY CORRIGIENDO
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

RE:QUE ESTA MAL???

Publicado por EDELRIO (540 intervenciones) el 20/09/2002 16:58:43
Solo como cultura general tome en cuenta que un Cursor no es la manera mas eficiente de realizar su Procesamiento, a menos que necesite ir validando o leyendo registro por registro....

Un Cursor a medida que va leyendo va liberando espacion en memoria, para el caso que usted presenta no es muy trascendente, pero se imagina cuanto tardaria con una cantidad considerable de registros???

Cuidado con eso y que no se vuelva una costumbre....

Yo opino lo mismo que Isaias (Saludos), usted no necesita un Cursor usted necesita hacer un insert seguido de un select.

Reciba un Saludo...
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