Select con variables en sp

02/09/2005 - 00:55 por Alex | Informe spam
Hola amigos,
estoy tratando de ejecutar este codigo y tengo problemas con las comillas,
no tengo idea de como hacer par que se ejecute la sgte. sentecia: Select *
from compras where idtipodocumento='01', el problema es como reemplazo los
apostrofes.


declare @tabla varchar(10), @tpo char(2)
declare @cad varchar(500)
set @tabla='COMPRAS'
set @tpo='01'
set @cad=('select * from '+@tabla+' where idtipodocumento="'+@tpo+'"')
exec (@cad)

Espero por favor su valiosa colaboración. Gracias.

Atte.
Alex Carmen Z.
Peru

Preguntas similare

Leer las respuestas

#1 Maxi
02/09/2005 - 02:15 | Informe spam
Hola, bueno usar SQL dinamico no es una buena tecnica desde el vamos :( .

porque quieres reemplazar los apostrofes?



Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Alex" escribió en el mensaje
news:uI%
Hola amigos,
estoy tratando de ejecutar este codigo y tengo problemas con las comillas,
no tengo idea de como hacer par que se ejecute la sgte. sentecia: Select *
from compras where idtipodocumento='01', el problema es como reemplazo los
apostrofes.


declare @tabla varchar(10), @tpo char(2)
declare @cad varchar(500)
set @tabla='COMPRAS'
set @tpo='01'
set @cad=('select * from '+@tabla+' where idtipodocumento="'+@tpo+'"')
exec (@cad)

Espero por favor su valiosa colaboración. Gracias.

Atte.
Alex Carmen Z.
Peru


Respuesta Responder a este mensaje
#2 Eleazar
02/09/2005 - 02:28 | Informe spam
HOLA trata asi
set @cad='select * from '+@tabla+' where idtipodocumento= "'+@tpo+'"'

"Alex" escribió en el mensaje
news:uI%
Hola amigos,
estoy tratando de ejecutar este codigo y tengo problemas con las comillas,
no tengo idea de como hacer par que se ejecute la sgte. sentecia: Select *
from compras where idtipodocumento='01', el problema es como reemplazo los
apostrofes.


declare @tabla varchar(10), @tpo char(2)
declare @cad varchar(500)
set @tabla='COMPRAS'
set @tpo='01'
set @cad=('select * from '+@tabla+' where idtipodocumento="'+@tpo+'"')
exec (@cad)

Espero por favor su valiosa colaboración. Gracias.

Atte.
Alex Carmen Z.
Peru


Respuesta Responder a este mensaje
#3 Ivan Pascual
02/09/2005 - 14:05 | Informe spam
En tu caso lo que yo haria es evitar el SQL dinamico, que es como se
solucionaria tu duda.
Como muy bien apunta el sabio Maxi no es una buena practica utilizar esta
metedologia.

Lo que yo haria es enviar la instruccion Select direactamente del codigo
fuente desde donde llamas a SqlServer, como puede ser por ejemplo Visual
Basic.

No se si me explico.

Ivan Pascual

"Eleazar" escribió en el mensaje
news:
HOLA trata asi
set @cad='select * from '+@tabla+' where idtipodocumento= "'+@tpo+'"'

"Alex" escribió en el mensaje
news:uI%
> Hola amigos,
> estoy tratando de ejecutar este codigo y tengo problemas con las


comillas,
> no tengo idea de como hacer par que se ejecute la sgte. sentecia: Select


*
> from compras where idtipodocumento='01', el problema es como reemplazo


los
> apostrofes.
>
>
> declare @tabla varchar(10), @tpo char(2)
> declare @cad varchar(500)
> set @tabla='COMPRAS'
> set @tpo='01'
> set @cad=('select * from '+@tabla+' where idtipodocumento="'+@tpo+'"')
> exec (@cad)
>
> Espero por favor su valiosa colaboración. Gracias.
>
> Atte.
> Alex Carmen Z.
> Peru
>
>


Respuesta Responder a este mensaje
#4 Alejandro Mesa
02/09/2005 - 14:52 | Informe spam
Ivan,

Lo que yo haria es enviar la instruccion Select direactamente del codigo
fuente desde donde llamas a SqlServer, como puede ser por ejemplo Visual
Basic.



Como bien dijo Maxi, trataria de evitar sql dinamico. Adjunto un link para
que lean sobre los pros y contras de sql dinamico. Pero tampoco estoy de
acuerdo con tu recomendacion, y de seguro Maxi estara de acuerdo conmigo,
pues no solo que habres una brecha para la injeccion de codigo hacia sql
server, sino que obligas a sql server a que cada vez que ebvies la sentencia,
este tenga que hacer un chequeo de sintaxis, compilar la sentnecia y luego
ejecutarla. como vez no haces uso de los planes de ejecucion en el cache,
facilidad que puede ayudar mucho en el rendimiento de tu aplicacion.

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

Cómo aprovechar las ventajas de las características integradas de ASP.NET
para rechazar los ataques a través de Internet (artículos técnicos sobre
ASP.NET)
http://www.microsoft.com/spanish/ms...rriers.asp


AMB

"Ivan Pascual" wrote:

En tu caso lo que yo haria es evitar el SQL dinamico, que es como se
solucionaria tu duda.
Como muy bien apunta el sabio Maxi no es una buena practica utilizar esta
metedologia.

Lo que yo haria es enviar la instruccion Select direactamente del codigo
fuente desde donde llamas a SqlServer, como puede ser por ejemplo Visual
Basic.

No se si me explico.

Ivan Pascual

"Eleazar" escribió en el mensaje
news:
> HOLA trata asi
> set @cad='select * from '+@tabla+' where idtipodocumento= "'+@tpo+'"'
>
> "Alex" escribió en el mensaje
> news:uI%
> > Hola amigos,
> > estoy tratando de ejecutar este codigo y tengo problemas con las
comillas,
> > no tengo idea de como hacer par que se ejecute la sgte. sentecia: Select
*
> > from compras where idtipodocumento='01', el problema es como reemplazo
los
> > apostrofes.
> >
> >
> > declare @tabla varchar(10), @tpo char(2)
> > declare @cad varchar(500)
> > set @tabla='COMPRAS'
> > set @tpo='01'
> > set @cad=('select * from '+@tabla+' where idtipodocumento="'+@tpo+'"')
> > exec (@cad)
> >
> > Espero por favor su valiosa colaboración. Gracias.
> >
> > Atte.
> > Alex Carmen Z.
> > Peru
> >
> >
>
>



Respuesta Responder a este mensaje
#5 Maxi
02/09/2005 - 15:30 | Informe spam
Hola amigo!! debo ser una de las personas que mas protesto contra el SQL
dinamico :-) pero debo aclarar una cosa.

En lo que respecta a performance no es malo usar SQL-Dinamico (en la version
2000), esta version mantiene un Cache y si se utiliza Sp_executeSql es
eficiente como usar Stores, es mas, muchos ORM (incluso el de Ms) utilizan
Sql-Dinamico.

Ahora, quiero aclarar algo, el Sql-Dinamico es muy malo para la seguridad y
de ser utilizado solo lo hemos puestos en consultas muy complejas donde el
uso de SP's era casi imposible (para la seguridad hemos usado Roles de
Aplicacion)

Con esto no quiero decir que estoy a favor del SQL-Dinamico ni en contra, lo
que no veo logico es usar SQL dinamico para lo que muchos desarrolladores lo
intentan usar, por ej Delete from @tabla o cosas similares.

Voy a ver si me hago algo de tiempo y puedo escribir un documento donde
podamos ver como usar SQL-Dinamico y no morir en el intento :-)

Un abrazo


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
Ivan,

Lo que yo haria es enviar la instruccion Select direactamente del codigo
fuente desde donde llamas a SqlServer, como puede ser por ejemplo Visual
Basic.



Como bien dijo Maxi, trataria de evitar sql dinamico. Adjunto un link para
que lean sobre los pros y contras de sql dinamico. Pero tampoco estoy de
acuerdo con tu recomendacion, y de seguro Maxi estara de acuerdo conmigo,
pues no solo que habres una brecha para la injeccion de codigo hacia sql
server, sino que obligas a sql server a que cada vez que ebvies la
sentencia,
este tenga que hacer un chequeo de sintaxis, compilar la sentnecia y luego
ejecutarla. como vez no haces uso de los planes de ejecucion en el cache,
facilidad que puede ayudar mucho en el rendimiento de tu aplicacion.

Las virtudes y maldades del SQL dinámico
http://www.hayes.ch/sql/sql_dinamico.html

Cómo aprovechar las ventajas de las características integradas de ASP.NET
para rechazar los ataques a través de Internet (artículos técnicos sobre
ASP.NET)
http://www.microsoft.com/spanish/ms...rriers.asp


AMB

"Ivan Pascual" wrote:

En tu caso lo que yo haria es evitar el SQL dinamico, que es como se
solucionaria tu duda.
Como muy bien apunta el sabio Maxi no es una buena practica utilizar esta
metedologia.

Lo que yo haria es enviar la instruccion Select direactamente del codigo
fuente desde donde llamas a SqlServer, como puede ser por ejemplo Visual
Basic.

No se si me explico.

Ivan Pascual

"Eleazar" escribió en el mensaje
news:
> HOLA trata asi
> set @cad='select * from '+@tabla+' where idtipodocumento= "'+@tpo+'"'
>
> "Alex" escribió en el mensaje
> news:uI%
> > Hola amigos,
> > estoy tratando de ejecutar este codigo y tengo problemas con las
comillas,
> > no tengo idea de como hacer par que se ejecute la sgte. sentecia:
> > Select
*
> > from compras where idtipodocumento='01', el problema es como
> > reemplazo
los
> > apostrofes.
> >
> >
> > declare @tabla varchar(10), @tpo char(2)
> > declare @cad varchar(500)
> > set @tabla='COMPRAS'
> > set @tpo='01'
> > set @cad=('select * from '+@tabla+' where
> > idtipodocumento="'+@tpo+'"')
> > exec (@cad)
> >
> > Espero por favor su valiosa colaboración. Gracias.
> >
> > Atte.
> > Alex Carmen Z.
> > Peru
> >
> >
>
>



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