consulta Cursores

21/12/2004 - 13:17 por Mennegguzzi | Informe spam
Hola tengo la siguiente query que estoy intentando usar para pasar registros
de una tabla a otra con la misma estructura, pero de otra base de datos:

Las bases de datos son Empresa1 y Empresa2
Las tablas se llaman igual en las dos bases: BASECLI
Los campos que quiero pasar son NROCTA, NOMBRE y VENDEDOR
El cursor se llama Clientes
La PK es NROCTA y la guardo en la variable @Codigo


DECLARE @Codigo VARCHAR (6)
DECLARE Clientes SCROLL CURSOR FOR
SELECT * FROM Empresa1.dbo.BASECLI
OPEN Clientes
FETCH FIRST FROM Clientes
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Codigo = (SELECT Clientes.NROCTA FROM Clientes)
IF NOT EXISTS (SELECT * FROM Empresa2.dbo.BASECLI WHERE
Empresa2.dbo.BASECLI.NROCTA = @NROCTA)
BEGIN
INSERT INTO Empresa2.dbo.BASECLI (NOMBRE, NROCTA, VENDEDOR)
SELECT Empresa1.dbo.BASECLI.NOMBRE, Empresa1.dbo.BASECLI.NROCTA,
Empresa1.dbo.BASECLI.VENDEDOR
FROM Empresa1.dbo.BASECLI
WHERE Empresa1.dbo.BASECLI.NROCTA = @Codigo
END
FETCH NEXT FROM Clientes
END
CLOSE Clientes
DEALLOCATE Clientes


y me da el siguiente mensaje de error:

NROCTA NOMBRE
VENDEDOR
ABBOTT ABBOTT LABORATORIES ARGENTINA S.A. RC

(1 filas afectadas)

Servidor: mensaje 208, nivel 16, estado 1, línea 10
Invalid object name 'Clientes'.



La pregunta es qué estoy manejando mal, debo poner algo más al lado de la
palabra Clientes(cursor definido) para que lo identifique como tal?

Desde ya les agradezco enormemente su ayuda

Saludos

Pablo
 

Leer las respuestas

#1 qwalgrande
21/12/2004 - 13:37 | Informe spam
Hola.

Por favor, por el bien de tu servidor, no uses cursores, puedes hacer lo
mismo con lo siguiente (o algo muy parecido):

INSERT INTO Empresa2.dbo.BASECLI (NOMBRE, NROCTA, VENDEDOR)
select E1.NOMBRE, E1.NROCTA, E1.VENDEDOR
from Empresa1.dbo.BASECLI E1 left join Empresa2.dbo.BASECLI E2 on
E1.NROCTA = E2.NROCTA
where E2.NROCAT is null

qwalgrande

"Mennegguzzi" wrote:

Hola tengo la siguiente query que estoy intentando usar para pasar registros
de una tabla a otra con la misma estructura, pero de otra base de datos:

Las bases de datos son Empresa1 y Empresa2
Las tablas se llaman igual en las dos bases: BASECLI
Los campos que quiero pasar son NROCTA, NOMBRE y VENDEDOR
El cursor se llama Clientes
La PK es NROCTA y la guardo en la variable @Codigo


DECLARE @Codigo VARCHAR (6)
DECLARE Clientes SCROLL CURSOR FOR
SELECT * FROM Empresa1.dbo.BASECLI
OPEN Clientes
FETCH FIRST FROM Clientes
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Codigo = (SELECT Clientes.NROCTA FROM Clientes)
IF NOT EXISTS (SELECT * FROM Empresa2.dbo.BASECLI WHERE
Empresa2.dbo.BASECLI.NROCTA = @NROCTA)
BEGIN
INSERT INTO Empresa2.dbo.BASECLI (NOMBRE, NROCTA, VENDEDOR)
SELECT Empresa1.dbo.BASECLI.NOMBRE, Empresa1.dbo.BASECLI.NROCTA,
Empresa1.dbo.BASECLI.VENDEDOR
FROM Empresa1.dbo.BASECLI
WHERE Empresa1.dbo.BASECLI.NROCTA = @Codigo
END
FETCH NEXT FROM Clientes
END
CLOSE Clientes
DEALLOCATE Clientes


y me da el siguiente mensaje de error:

NROCTA NOMBRE
VENDEDOR
ABBOTT ABBOTT LABORATORIES ARGENTINA S.A. RC

(1 filas afectadas)

Servidor: mensaje 208, nivel 16, estado 1, línea 10
Invalid object name 'Clientes'.



La pregunta es qué estoy manejando mal, debo poner algo más al lado de la
palabra Clientes(cursor definido) para que lo identifique como tal?

Desde ya les agradezco enormemente su ayuda

Saludos

Pablo



Preguntas similares