Variable en cursor o Use en Procedure

04/03/2004 - 19:23 por Juan José Pinero | Informe spam
Hola Grupo,

Estoy haciendo un procedure y necesito abrir un cursor (perdonad los
detractores de los cursores, pero el fín justifica los medios) que apunte a
una de las 5 Bases de datos de que dispongo(BD1, BD2, BD3, BD4 y BD5). Al
procedure le paso la variable @BBDD sobre la que quiero realizar la
consulta.

Opción 1:
Use BD3

El problema es que se produce un error que informa que no se puede
utilizar Use en procedure

Opción 2:
Declare @MiTabla nvarchar(100)
Set @MiTabla = '[' + @BBDD + '].[dbo].[MiTablaComun]'
Declare MiCursor CURSOR FOR

SELECT *FROM @MiTabla
OPEN MiCursor

En este caso me dice que debo declarar la variable @MiTabla


No entiendo qué pasa. ¿Qué estoy haciendo mal?

Gracias de antemano.

Preguntas similare

Leer las respuestas

#1 Maximiliano D. A.
04/03/2004 - 19:35 | Informe spam
Deberias usar SqlDinamico si queres por variable pasar la BASE o sea
revisate en tus manuales el

sp_executesql, esto podria serte util!!

Ahora porque pensas usar un cursor? que necesitas hacer que no encontraste
otra qie un cursor?

Bye


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Juan José Pinero" escribió en el mensaje
news:c27s7q$4o3$
Hola Grupo,

Estoy haciendo un procedure y necesito abrir un cursor (perdonad los
detractores de los cursores, pero el fín justifica los medios) que apunte


a
una de las 5 Bases de datos de que dispongo(BD1, BD2, BD3, BD4 y BD5). Al
procedure le paso la variable @BBDD sobre la que quiero realizar la
consulta.

Opción 1:
Use BD3

El problema es que se produce un error que informa que no se puede
utilizar Use en procedure

Opción 2:
Declare @MiTabla nvarchar(100)
Set @MiTabla = '[' + @BBDD + '].[dbo].[MiTablaComun]'
Declare MiCursor CURSOR FOR

SELECT *FROM @MiTabla
OPEN MiCursor

En este caso me dice que debo declarar la variable @MiTabla


No entiendo qué pasa. ¿Qué estoy haciendo mal?

Gracias de antemano.



















Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 20/02/2004
Respuesta Responder a este mensaje
#2 Juan José Pinero
04/03/2004 - 20:01 | Informe spam
Gracias por tu respuesta,

No te he entendido bien, ¿te refieres a que abra el cursor utilizando
sp_executesql?
En cuanto a abrir el cursor con sp_executesql ya lo he intentado, pero me
dice que hay error de sintaxis cerca de sp_executesql.

Esta es la cuestión por la que creo que no tengo más remedio que utilizar
cursor en el procedure:

Necesito ejecutar 2 consultas, las 2 devuelven varios registros. Estas
consultas deberé poder realizarlas en cualquiera de las 5 bases de datos de
producción.


Consulta1 (Cabecera)
NºPedido, Proveedor, TotalUds, TotalImporte

Consulta2 (Detalle)
Articulo, Uds, ImporteLinea

Por cada registro de la Consulta1 obtendré varios registros de la Consulta2.

El problema es que tengo que generar un fichero con el siguiente formato:

Consulta1.Registro1.NºPedido Consulta1.Registro1.Proveedor
Consulta1.Registro1.TotalUds Consulta1.Registro1.TotalImporte
Consulta2.Registro1.Articulo Consulta2.Registro1.Uds
Consulta2.Registro1.ImporteLinea
Consulta2.Registro2.Articulo Consulta2.Registro2.Uds
Consulta2.Registro2.ImporteLinea
Consulta2.Registro3.Articulo Consulta2.Registro3.Uds
Consulta2.Registro3.ImporteLinea
..
..
Consulta2.RegistroN.Articulo Consulta2.RegistroN.Uds
Consulta2.RegistroN.ImporteLinea

Consulta1.Registro2.NºPedido Consulta1.Registro1.Proveedor
Consulta1.Registro1.TotalUds Consulta1.Registro1.TotalImporte
Consulta2.Registro1.Articulo Consulta2.Registro1.Uds
Consulta2.Registro1.ImporteLinea
Consulta2.Registro2.Articulo Consulta2.Registro2.Uds
Consulta2.Registro2.ImporteLinea
Consulta2.Registro3.Articulo Consulta2.Registro3.Uds
Consulta2.Registro3.ImporteLinea
.
.
Consulta2.RegistroN.Articulo Consulta2.RegistroN.Uds
Consulta2.RegistroN.ImporteLinea


Pues bien, con el cursor abro la Consulta1 y en una tabla temporal voy
generando las líneas que necesito escribir al fichero en orden. No abro
cursor para la Consulta2, si no que hago un INSERT directamente en la tabla
temporal filtrando con las claves que me devuelve el cursor de la
Consulta1.

No conozco ninguna otra forma de resolver este problema sin utilizar el
cursor.



Saludos y Gracias,




"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:#qj$
Deberias usar SqlDinamico si queres por variable pasar la BASE o sea
revisate en tus manuales el

sp_executesql, esto podria serte util!!

Ahora porque pensas usar un cursor? que necesitas hacer que no encontraste
otra qie un cursor?

Bye


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Juan José Pinero" escribió en el mensaje
news:c27s7q$4o3$
> Hola Grupo,
>
> Estoy haciendo un procedure y necesito abrir un cursor (perdonad los
> detractores de los cursores, pero el fín justifica los medios) que


apunte
a
> una de las 5 Bases de datos de que dispongo(BD1, BD2, BD3, BD4 y BD5).


Al
> procedure le paso la variable @BBDD sobre la que quiero realizar la
> consulta.
>
> Opción 1:
> Use BD3
>
> El problema es que se produce un error que informa que no se puede
> utilizar Use en procedure
>
> Opción 2:
> Declare @MiTabla nvarchar(100)
> Set @MiTabla = '[' + @BBDD + '].[dbo].[MiTablaComun]'
> Declare MiCursor CURSOR FOR
>
> SELECT *FROM @MiTabla
> OPEN MiCursor
>
> En este caso me dice que debo declarar la variable @MiTabla
>
>
> No entiendo qué pasa. ¿Qué estoy haciendo mal?
>
> Gracias de antemano.
>
>
>
>
>
>
>
>
>
>
>
>
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 20/02/2004


Respuesta Responder a este mensaje
#3 Juan José Pinero
04/03/2004 - 20:01 | Informe spam
Gracias por tu respuesta,

No te he entendido bien, ¿te refieres a que abra el cursor utilizando
sp_executesql?
En cuanto a abrir el cursor con sp_executesql ya lo he intentado, pero me
dice que hay error de sintaxis cerca de sp_executesql.

Esta es la cuestión por la que creo que no tengo más remedio que utilizar
cursor en el procedure:

Necesito ejecutar 2 consultas, las 2 devuelven varios registros. Estas
consultas deberé poder realizarlas en cualquiera de las 5 bases de datos de
producción.


Consulta1 (Cabecera)
NºPedido, Proveedor, TotalUds, TotalImporte

Consulta2 (Detalle)
Articulo, Uds, ImporteLinea

Por cada registro de la Consulta1 obtendré varios registros de la Consulta2.

El problema es que tengo que generar un fichero con el siguiente formato:

Consulta1.Registro1.NºPedido Consulta1.Registro1.Proveedor
Consulta1.Registro1.TotalUds Consulta1.Registro1.TotalImporte
Consulta2.Registro1.Articulo Consulta2.Registro1.Uds
Consulta2.Registro1.ImporteLinea
Consulta2.Registro2.Articulo Consulta2.Registro2.Uds
Consulta2.Registro2.ImporteLinea
Consulta2.Registro3.Articulo Consulta2.Registro3.Uds
Consulta2.Registro3.ImporteLinea
..
..
Consulta2.RegistroN.Articulo Consulta2.RegistroN.Uds
Consulta2.RegistroN.ImporteLinea

Consulta1.Registro2.NºPedido Consulta1.Registro1.Proveedor
Consulta1.Registro1.TotalUds Consulta1.Registro1.TotalImporte
Consulta2.Registro1.Articulo Consulta2.Registro1.Uds
Consulta2.Registro1.ImporteLinea
Consulta2.Registro2.Articulo Consulta2.Registro2.Uds
Consulta2.Registro2.ImporteLinea
Consulta2.Registro3.Articulo Consulta2.Registro3.Uds
Consulta2.Registro3.ImporteLinea
.
.
Consulta2.RegistroN.Articulo Consulta2.RegistroN.Uds
Consulta2.RegistroN.ImporteLinea


Pues bien, con el cursor abro la Consulta1 y en una tabla temporal voy
generando las líneas que necesito escribir al fichero en orden. No abro
cursor para la Consulta2, si no que hago un INSERT directamente en la tabla
temporal filtrando con las claves que me devuelve el cursor de la
Consulta1.

No conozco ninguna otra forma de resolver este problema sin utilizar el
cursor.



Saludos y Gracias,




"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:#qj$
Deberias usar SqlDinamico si queres por variable pasar la BASE o sea
revisate en tus manuales el

sp_executesql, esto podria serte util!!

Ahora porque pensas usar un cursor? que necesitas hacer que no encontraste
otra qie un cursor?

Bye


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Juan José Pinero" escribió en el mensaje
news:c27s7q$4o3$
> Hola Grupo,
>
> Estoy haciendo un procedure y necesito abrir un cursor (perdonad los
> detractores de los cursores, pero el fín justifica los medios) que


apunte
a
> una de las 5 Bases de datos de que dispongo(BD1, BD2, BD3, BD4 y BD5).


Al
> procedure le paso la variable @BBDD sobre la que quiero realizar la
> consulta.
>
> Opción 1:
> Use BD3
>
> El problema es que se produce un error que informa que no se puede
> utilizar Use en procedure
>
> Opción 2:
> Declare @MiTabla nvarchar(100)
> Set @MiTabla = '[' + @BBDD + '].[dbo].[MiTablaComun]'
> Declare MiCursor CURSOR FOR
>
> SELECT *FROM @MiTabla
> OPEN MiCursor
>
> En este caso me dice que debo declarar la variable @MiTabla
>
>
> No entiendo qué pasa. ¿Qué estoy haciendo mal?
>
> Gracias de antemano.
>
>
>
>
>
>
>
>
>
>
>
>
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 20/02/2004


Respuesta Responder a este mensaje
#4 Maximiliano D. A.
04/03/2004 - 20:16 | Informe spam
Bueno ahora has sido muy claro y eso me gusta!! como cosa linda es que
podemos sacar el cursor!!!

Porque no intentas hacer algo asi como:

Select tabla1.campos,tabla1..campos,tabla2.campos from tabla1 left join
(select campos from tabla2) tabla2 on
tabla1.campo_id = tabla2.campoid


esta es una forma que te puede servir, adaptalo a tus tablas.

Cuando yo te hablo de sp_executesql es porque vi que querias hacer un select
tipo asi:

declare @mibase varchar(255)

set @mibase ='maxi'

Select * from @MIBASE.TABLA

esto si no usas SqlDinamico no te funcionara :(

Bye

Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Juan José Pinero" escribió en el mensaje
news:c27ue1$l3o$
Gracias por tu respuesta,

No te he entendido bien, ¿te refieres a que abra el cursor utilizando
sp_executesql?
En cuanto a abrir el cursor con sp_executesql ya lo he intentado, pero me
dice que hay error de sintaxis cerca de sp_executesql.

Esta es la cuestión por la que creo que no tengo más remedio que utilizar
cursor en el procedure:

Necesito ejecutar 2 consultas, las 2 devuelven varios registros. Estas
consultas deberé poder realizarlas en cualquiera de las 5 bases de datos


de
producción.


Consulta1 (Cabecera)
NºPedido, Proveedor, TotalUds, TotalImporte

Consulta2 (Detalle)
Articulo, Uds, ImporteLinea

Por cada registro de la Consulta1 obtendré varios registros de la


Consulta2.

El problema es que tengo que generar un fichero con el siguiente formato:

Consulta1.Registro1.NºPedido Consulta1.Registro1.Proveedor
Consulta1.Registro1.TotalUds Consulta1.Registro1.TotalImporte
Consulta2.Registro1.Articulo Consulta2.Registro1.Uds
Consulta2.Registro1.ImporteLinea
Consulta2.Registro2.Articulo Consulta2.Registro2.Uds
Consulta2.Registro2.ImporteLinea
Consulta2.Registro3.Articulo Consulta2.Registro3.Uds
Consulta2.Registro3.ImporteLinea
..
..
Consulta2.RegistroN.Articulo Consulta2.RegistroN.Uds
Consulta2.RegistroN.ImporteLinea

Consulta1.Registro2.NºPedido Consulta1.Registro1.Proveedor
Consulta1.Registro1.TotalUds Consulta1.Registro1.TotalImporte
Consulta2.Registro1.Articulo Consulta2.Registro1.Uds
Consulta2.Registro1.ImporteLinea
Consulta2.Registro2.Articulo Consulta2.Registro2.Uds
Consulta2.Registro2.ImporteLinea
Consulta2.Registro3.Articulo Consulta2.Registro3.Uds
Consulta2.Registro3.ImporteLinea
.
.
Consulta2.RegistroN.Articulo Consulta2.RegistroN.Uds
Consulta2.RegistroN.ImporteLinea


Pues bien, con el cursor abro la Consulta1 y en una tabla temporal voy
generando las líneas que necesito escribir al fichero en orden. No abro
cursor para la Consulta2, si no que hago un INSERT directamente en la


tabla
temporal filtrando con las claves que me devuelve el cursor de la
Consulta1.

No conozco ninguna otra forma de resolver este problema sin utilizar el
cursor.



Saludos y Gracias,




"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:#qj$
> Deberias usar SqlDinamico si queres por variable pasar la BASE o sea
> revisate en tus manuales el
>
> sp_executesql, esto podria serte util!!
>
> Ahora porque pensas usar un cursor? que necesitas hacer que no


encontraste
> otra qie un cursor?
>
> Bye
>
>
> Salu2
> Maxi
> Buenos Aires Argentina
> Desarrollador Microsoft 3 Estrellas .NET
> [Maxi_accotto[arroba]speedy[punto]com[punto]ar
> MSN:
>
>
> "Juan José Pinero" escribió en el mensaje
> news:c27s7q$4o3$
> > Hola Grupo,
> >
> > Estoy haciendo un procedure y necesito abrir un cursor (perdonad los
> > detractores de los cursores, pero el fín justifica los medios) que
apunte
> a
> > una de las 5 Bases de datos de que dispongo(BD1, BD2, BD3, BD4 y BD5).
Al
> > procedure le paso la variable @BBDD sobre la que quiero realizar la
> > consulta.
> >
> > Opción 1:
> > Use BD3
> >
> > El problema es que se produce un error que informa que no se puede
> > utilizar Use en procedure
> >
> > Opción 2:
> > Declare @MiTabla nvarchar(100)
> > Set @MiTabla = '[' + @BBDD + '].[dbo].[MiTablaComun]'
> > Declare MiCursor CURSOR FOR
> >
> > SELECT *FROM @MiTabla
> > OPEN MiCursor
> >
> > En este caso me dice que debo declarar la variable @MiTabla
> >
> >
> > No entiendo qué pasa. ¿Qué estoy haciendo mal?
> >
> > Gracias de antemano.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
>
>
>
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.593 / Virus Database: 376 - Release Date: 20/02/2004
>
>









Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 20/02/2004
Respuesta Responder a este mensaje
#5 Juan José Pinero
04/03/2004 - 20:30 | Informe spam
Lo haría, pero la línea de cabera sólo puede tener campos de la consulta de
cabecera y en las líneas de detalle sólo puede haber campos de la consulta
de detalle.

¿Me puedes confirma la imposibilidad de declarar un cursor con Sql dinámico?

Gracias de todas formas.



Un saludo.



"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:
Bueno ahora has sido muy claro y eso me gusta!! como cosa linda es que
podemos sacar el cursor!!!

Porque no intentas hacer algo asi como:

Select tabla1.campos,tabla1..campos,tabla2.campos from tabla1 left join
(select campos from tabla2) tabla2 on
tabla1.campo_id = tabla2.campoid


esta es una forma que te puede servir, adaptalo a tus tablas.

Cuando yo te hablo de sp_executesql es porque vi que querias hacer un


select
tipo asi:

declare @mibase varchar(255)

set @mibase ='maxi'

Select * from @MIBASE.TABLA

esto si no usas SqlDinamico no te funcionara :(

Bye

Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"Juan José Pinero" escribió en el mensaje
news:c27ue1$l3o$
> Gracias por tu respuesta,
>
> No te he entendido bien, ¿te refieres a que abra el cursor utilizando
> sp_executesql?
> En cuanto a abrir el cursor con sp_executesql ya lo he intentado, pero


me
> dice que hay error de sintaxis cerca de sp_executesql.
>
> Esta es la cuestión por la que creo que no tengo más remedio que


utilizar
> cursor en el procedure:
>
> Necesito ejecutar 2 consultas, las 2 devuelven varios registros. Estas
> consultas deberé poder realizarlas en cualquiera de las 5 bases de datos
de
> producción.
>
>
> Consulta1 (Cabecera)
> NºPedido, Proveedor, TotalUds, TotalImporte
>
> Consulta2 (Detalle)
> Articulo, Uds, ImporteLinea
>
> Por cada registro de la Consulta1 obtendré varios registros de la
Consulta2.
>
> El problema es que tengo que generar un fichero con el siguiente


formato:
>
> Consulta1.Registro1.NºPedido Consulta1.Registro1.Proveedor
> Consulta1.Registro1.TotalUds Consulta1.Registro1.TotalImporte
> Consulta2.Registro1.Articulo Consulta2.Registro1.Uds
> Consulta2.Registro1.ImporteLinea
> Consulta2.Registro2.Articulo Consulta2.Registro2.Uds
> Consulta2.Registro2.ImporteLinea
> Consulta2.Registro3.Articulo Consulta2.Registro3.Uds
> Consulta2.Registro3.ImporteLinea
> ..
> ..
> Consulta2.RegistroN.Articulo Consulta2.RegistroN.Uds
> Consulta2.RegistroN.ImporteLinea
>
> Consulta1.Registro2.NºPedido Consulta1.Registro1.Proveedor
> Consulta1.Registro1.TotalUds Consulta1.Registro1.TotalImporte
> Consulta2.Registro1.Articulo Consulta2.Registro1.Uds
> Consulta2.Registro1.ImporteLinea
> Consulta2.Registro2.Articulo Consulta2.Registro2.Uds
> Consulta2.Registro2.ImporteLinea
> Consulta2.Registro3.Articulo Consulta2.Registro3.Uds
> Consulta2.Registro3.ImporteLinea
> .
> .
> Consulta2.RegistroN.Articulo Consulta2.RegistroN.Uds
> Consulta2.RegistroN.ImporteLinea
>
>
> Pues bien, con el cursor abro la Consulta1 y en una tabla temporal voy
> generando las líneas que necesito escribir al fichero en orden. No abro
> cursor para la Consulta2, si no que hago un INSERT directamente en la
tabla
> temporal filtrando con las claves que me devuelve el cursor de la
> Consulta1.
>
> No conozco ninguna otra forma de resolver este problema sin utilizar el
> cursor.
>
>
>
> Saludos y Gracias,
>
>
>
>
> "Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en


el
> mensaje news:#qj$
> > Deberias usar SqlDinamico si queres por variable pasar la BASE o sea
> > revisate en tus manuales el
> >
> > sp_executesql, esto podria serte util!!
> >
> > Ahora porque pensas usar un cursor? que necesitas hacer que no
encontraste
> > otra qie un cursor?
> >
> > Bye
> >
> >
> > Salu2
> > Maxi
> > Buenos Aires Argentina
> > Desarrollador Microsoft 3 Estrellas .NET
> > [Maxi_accotto[arroba]speedy[punto]com[punto]ar
> > MSN:
> >
> >
> > "Juan José Pinero" escribió en el mensaje
> > news:c27s7q$4o3$
> > > Hola Grupo,
> > >
> > > Estoy haciendo un procedure y necesito abrir un cursor (perdonad los
> > > detractores de los cursores, pero el fín justifica los medios) que
> apunte
> > a
> > > una de las 5 Bases de datos de que dispongo(BD1, BD2, BD3, BD4 y


BD5).
> Al
> > > procedure le paso la variable @BBDD sobre la que quiero realizar la
> > > consulta.
> > >
> > > Opción 1:
> > > Use BD3
> > >
> > > El problema es que se produce un error que informa que no se


puede
> > > utilizar Use en procedure
> > >
> > > Opción 2:
> > > Declare @MiTabla nvarchar(100)
> > > Set @MiTabla = '[' + @BBDD + '].[dbo].[MiTablaComun]'
> > > Declare MiCursor CURSOR FOR
> > >
> > > SELECT *FROM @MiTabla
> > > OPEN MiCursor
> > >
> > > En este caso me dice que debo declarar la variable @MiTabla
> > >
> > >
> > > No entiendo qué pasa. ¿Qué estoy haciendo mal?
> > >
> > > Gracias de antemano.
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> >
> >
> >
> > Outgoing mail is certified Virus Free.
> > Checked by AVG anti-virus system (http://www.grisoft.com).
> > Version: 6.0.593 / Virus Database: 376 - Release Date: 20/02/2004
> >
> >
>
>
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date: 20/02/2004


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida