Como paso un parametro a una clausula IN(@parametro)

13/01/2005 - 01:27 por Jose Lopez | Informe spam
Pretendo pasar un parametro por medio de una variable de tipo Varchar pero
que se cumpla como complemento de un procedimiento Almacenado en una
condicion de un Select que maneja este procedimiento, mas o menos es asi:
______________________________________
CREATE PROCEDURE XX_SGI_AI_FACTURA_TR
@mes_ren int, @empresas varchar(100)
..
select *
from mi_tabla
where month(dateadd(month, @mes_ren, getdate()) )=month(fecha_incre) and
year(fecha_incre) =year(dateadd(month, @mes_ren, getdate())) and empre_cobra
in (@empresas)

______________________________________
y en esta ultima condicion esta el problema porque el campo de EMPRESA_COBRA
es numerico pero lo que necesito es que se incluya de acuerdo a una seleccion
una lista de los codigos de las empresas y el error es que no se puede
convertir la cadena a numero... pero no se como poner esta parte dinamica...
para que funcione...
Agradezco en mucho sus repuestas y aportes
gracias de nuevo.

Preguntas similare

Leer las respuestas

#1 Rubén Vigón
13/01/2005 - 12:44 | Informe spam
Hola Jose,

Yo lo resolvería con «OpenXML» y un parámetro XML en tu procedimiento almacenado; échale un vistazo a este artículo:

Implementación de argumentos variables mediante XML en SQL Server 2000
Cómo pasar un número de argumentos variables a los procedimientos almacenados usando XML, evitando el uso de SQL dinámico (sp_executesql)
http://www.mvp-access.com/rubenvigo...server.pdf

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon
Respuesta Responder a este mensaje
#2 ulises
13/01/2005 - 12:52 | Informe spam
Más abajo revisa el hilo "in()" comenta respuestas a la
pregunta que estás realizando.

Saludos,
Ulises

Pretendo pasar un parametro por medio de una variable de


tipo Varchar pero
que se cumpla como complemento de un procedimiento


Almacenado en una
condicion de un Select que maneja este procedimiento, mas


o menos es asi:
______________________________________
CREATE PROCEDURE XX_SGI_AI_FACTURA_TR
@mes_ren int, @empresas varchar(100)
...
select *
from mi_tabla
where month(dateadd(month, @mes_ren, getdate())


)=month(fecha_incre) and
year(fecha_incre) =year(dateadd(month, @mes_ren,


getdate())) and empre_cobra
in (@empresas)
.
______________________________________
y en esta ultima condicion esta el problema porque el


campo de EMPRESA_COBRA
es numerico pero lo que necesito es que se incluya de


acuerdo a una seleccion
una lista de los codigos de las empresas y el error es


que no se puede
convertir la cadena a numero... pero no se como poner esta


parte dinamica...
para que funcione...
Agradezco en mucho sus repuestas y aportes
gracias de nuevo.
.

Respuesta Responder a este mensaje
#3 Melissa Ruiz
13/01/2005 - 13:59 | Informe spam
Hola, dos preguntitas:

1) Cualquier problema similar con paso variable de parametros se pudiera
implementar de forma segura con xml ?

2) En el Form_Load veo que tienes un: rs.open "select * from empleados
", no conozco mucho VB pero imagino que estas enviando un query
directamente al servidor no ?
Si es asi, no te da eso problema tambien de que te puedan inyectar codigo
por ahi como viven sugiriendo los companeros del foro de que no se usen
consultas directamente a las tablas ?


Gracias



"Rubén Vigón" wrote in message
news:Obt27UW%
Hola Jose,

Yo lo resolvería con «OpenXML» y un parámetro XML en tu procedimiento
almacenado; échale un vistazo a este artículo:

Implementación de argumentos variables mediante XML en SQL Server 2000
Cómo pasar un número de argumentos variables a los procedimientos
almacenados usando XML, evitando el uso de SQL dinámico (sp_executesql)
http://www.mvp-access.com/rubenvigo...server.pdf

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon
Respuesta Responder a este mensaje
#4 Rubén Vigón
13/01/2005 - 15:50 | Informe spam
Hola Melissa,

No me atrevería a decir que *cualquier* problema similar se podría resolver con XML, pero yo he resuelto prácticamente todos los que me he encontrado con este método; seguramente haya problemas más "retorcidos" que requieran el uso de SQL dinámico, pero creo que, para la gran mayoría de problemas cotidianos, es una solución excelente

La inyección de código requiere que el usuario final pueda escribir algún texto, y que éste texto sea enviado desde la aplicación como parte de una consulta al servidor. El caso típico es una pantalla de "Inicio de sesión" donde el usuario introduce su nombre de usuario y contraseña; algunos desarrolladores descuidados hacen algo así como:

rst.Open "SELECT * FROM Usuarios WHERE Usuario = '" & txtUsuario.Text & "' AND Contraseña = '" & txtContraseña.Text & "'"

Y se presenta el problema cuando un usuario "avispado" introduce lo siguiente en la caja de texto para la contraseña:

xyz' OR 'a' = 'a

Como puedes ver, la sentencia SQL que se enviará al servidor quedaría así:

SELECT * FROM Usuarios WHERE Usuario = 'Pedro' AND Contraseña = 'xyz' OR 'a' = 'a'

Para evitarlo, basta con usar un procedimiento almacenado con un par de parámetros, en lugar de generar dinámicamente la sentencia SQL desde el código de la aplicación.

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon
Respuesta Responder a este mensaje
#5 Jose Lopez
14/01/2005 - 00:37 | Informe spam
ok gracias lo vere y te comento, saludos

"Rubén Vigón" wrote:

Hola Jose,

Yo lo resolvería con «OpenXML» y un parámetro XML en tu procedimiento almacenado; échale un vistazo a este artículo:

Implementación de argumentos variables mediante XML en SQL Server 2000
Cómo pasar un número de argumentos variables a los procedimientos almacenados usando XML, evitando el uso de SQL dinámico (sp_executesql)
http://www.mvp-access.com/rubenvigo...server.pdf

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://www.mvp-access.com/rubenvigon

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida