Newsgrupos.com  

Retroceder   Newsgrupos.com > Forum > Newsgroup microsoft.public.es.* 1 Foro > Newsgroup microsoft.public.es.dotnet.vb
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 28-08-2008, 02:06:11
Manolo Zepeda
 
Mensajes: n/a
Predeterminado Clausula IN

Que tal amigos.
Tengo la siguiente tabla.

Vendedores
1 Id_Vendedor smallint
2 Nombre nvarchar(50)

en .NET tengo el siguiente codigo.
dim lista="1,4"
dim cnn as sqlconexion=abrir_conexion(server,bd)
dim cmd as new sqlcomand("Select Id_Vendedor from Vendedores WHERE
Id_Vendedor IN('" & lista & "'",cnn)
dim dr as sqldatareader=cmd.executereader
'Hasta aqui funciona perfectamente cuando yo quiero seleccionar solamente
'los vendedores 1 y 4

Mi problema viene cuando lo hago mediante un Store Procedure.
Ej.
dim lista="1,4"
dim cnn as sqlconexion=abrir_conexion(server,bd)
Dim cmd As New SqlCommand("Seleccion", cnn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("***Id_Vendedor", SqlDbType.NVarChar, 15).Value = lista
Dim dr As SqlDataReader = cmd.ExecuteReader

'****Store Procedure
Alter Procedure Seleccion
***lista as nvarchar(15)
AS
Select Id_Vendedor WHERE Id_Vendedor IN(lista)

'Aqui me envia un error..
Conversion failed when converting the nvarchar value '1,4' to data type
smallint.
Lo que no entiendo porque desde un texto en un Command no tengo ningún
problema, solo cuando lo ejecuto directamente en el Store Procedure.

Saludos
Responder Con Cita
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Newsgrupos.com
Standard Sponsored Links

  #2 (permalink)  
Antiguo 28-08-2008, 07:26:38
Alberto Poblacion
 
Mensajes: n/a
Predeterminado Re: Clausula IN

"Manolo Zepeda" <ManoloZepeda***discussions.microsoft.com> wrote in message
news:03073FB3-5A2F-4869-8F6D-2A4FAD7B8BB0***microsoft.com...
> Tengo la siguiente tabla.
>
> Vendedores
> 1 Id_Vendedor smallint
> 2 Nombre nvarchar(50)
>
> en .NET tengo el siguiente codigo.
> dim lista="1,4"
> dim cnn as sqlconexion=abrir_conexion(server,bd)
> dim cmd as new sqlcomand("Select Id_Vendedor from Vendedores WHERE
> Id_Vendedor IN('" & lista & "'",cnn)
> dim dr as sqldatareader=cmd.executereader
> 'Hasta aqui funciona perfectamente cuando yo quiero seleccionar solamente
> 'los vendedores 1 y 4
>
> Mi problema viene cuando lo hago mediante un Store Procedure.
> Ej.
> dim lista="1,4"
> dim cnn as sqlconexion=abrir_conexion(server,bd)
> Dim cmd As New SqlCommand("Seleccion", cnn)
> cmd.CommandType = CommandType.StoredProcedure
> cmd.Parameters.Add("***Id_Vendedor", SqlDbType.NVarChar, 15).Value = lista
> Dim dr As SqlDataReader = cmd.ExecuteReader
>
> '****Store Procedure
> Alter Procedure Seleccion
> ***lista as nvarchar(15)
> AS
> Select Id_Vendedor WHERE Id_Vendedor IN(lista)
>
> 'Aqui me envia un error..
> Conversion failed when converting the nvarchar value '1,4' to data type
> smallint.
> Lo que no entiendo porque desde un texto en un Command no tengo ningún
> problema, solo cuando lo ejecuto directamente en el Store Procedure.



La diferencia no está en que se trate de un stored procedure o de un
command, sino en que se use parametrización o Sql Dinámico. En tu command
estás usando sql dinámico (concatenando el texto en la sentencia), mientras
que en el stored procedure estás usando un parámetro en la sentencia, cosa
que no es lÃ***cita para pasar la lista de valores de un IN.
Si utilizases parámetros en el Command, te fallarÃ***a igual que el stored
procedure. Y si usas Sql dinámico en el stored procedure (concatenando el
texto y ejecutándolo con EXEC o con sp_executesql), te funcionará igual que
tu command.

Responder Con Cita
  #3 (permalink)  
Antiguo 28-08-2008, 07:26:38
Alberto Poblacion
 
Mensajes: n/a
Predeterminado Re: Clausula IN

"Manolo Zepeda" <ManoloZepeda***discussions.microsoft.com> wrote in message
news:03073FB3-5A2F-4869-8F6D-2A4FAD7B8BB0***microsoft.com...
> Tengo la siguiente tabla.
>
> Vendedores
> 1 Id_Vendedor smallint
> 2 Nombre nvarchar(50)
>
> en .NET tengo el siguiente codigo.
> dim lista="1,4"
> dim cnn as sqlconexion=abrir_conexion(server,bd)
> dim cmd as new sqlcomand("Select Id_Vendedor from Vendedores WHERE
> Id_Vendedor IN('" & lista & "'",cnn)
> dim dr as sqldatareader=cmd.executereader
> 'Hasta aqui funciona perfectamente cuando yo quiero seleccionar solamente
> 'los vendedores 1 y 4
>
> Mi problema viene cuando lo hago mediante un Store Procedure.
> Ej.
> dim lista="1,4"
> dim cnn as sqlconexion=abrir_conexion(server,bd)
> Dim cmd As New SqlCommand("Seleccion", cnn)
> cmd.CommandType = CommandType.StoredProcedure
> cmd.Parameters.Add("***Id_Vendedor", SqlDbType.NVarChar, 15).Value = lista
> Dim dr As SqlDataReader = cmd.ExecuteReader
>
> '****Store Procedure
> Alter Procedure Seleccion
> ***lista as nvarchar(15)
> AS
> Select Id_Vendedor WHERE Id_Vendedor IN(lista)
>
> 'Aqui me envia un error..
> Conversion failed when converting the nvarchar value '1,4' to data type
> smallint.
> Lo que no entiendo porque desde un texto en un Command no tengo ningún
> problema, solo cuando lo ejecuto directamente en el Store Procedure.



La diferencia no está en que se trate de un stored procedure o de un
command, sino en que se use parametrización o Sql Dinámico. En tu command
estás usando sql dinámico (concatenando el texto en la sentencia), mientras
que en el stored procedure estás usando un parámetro en la sentencia, cosa
que no es lÃ***cita para pasar la lista de valores de un IN.
Si utilizases parámetros en el Command, te fallarÃ***a igual que el stored
procedure. Y si usas Sql dinámico en el stored procedure (concatenando el
texto y ejecutándolo con EXEC o con sp_executesql), te funcionará igual que
tu command.

Responder Con Cita
  #4 (permalink)  
Antiguo 28-08-2008, 07:26:38
Alberto Poblacion
 
Mensajes: n/a
Predeterminado Re: Clausula IN

"Manolo Zepeda" <ManoloZepeda***discussions.microsoft.com> wrote in message
news:03073FB3-5A2F-4869-8F6D-2A4FAD7B8BB0***microsoft.com...
> Tengo la siguiente tabla.
>
> Vendedores
> 1 Id_Vendedor smallint
> 2 Nombre nvarchar(50)
>
> en .NET tengo el siguiente codigo.
> dim lista="1,4"
> dim cnn as sqlconexion=abrir_conexion(server,bd)
> dim cmd as new sqlcomand("Select Id_Vendedor from Vendedores WHERE
> Id_Vendedor IN('" & lista & "'",cnn)
> dim dr as sqldatareader=cmd.executereader
> 'Hasta aqui funciona perfectamente cuando yo quiero seleccionar solamente
> 'los vendedores 1 y 4
>
> Mi problema viene cuando lo hago mediante un Store Procedure.
> Ej.
> dim lista="1,4"
> dim cnn as sqlconexion=abrir_conexion(server,bd)
> Dim cmd As New SqlCommand("Seleccion", cnn)
> cmd.CommandType = CommandType.StoredProcedure
> cmd.Parameters.Add("***Id_Vendedor", SqlDbType.NVarChar, 15).Value = lista
> Dim dr As SqlDataReader = cmd.ExecuteReader
>
> '****Store Procedure
> Alter Procedure Seleccion
> ***lista as nvarchar(15)
> AS
> Select Id_Vendedor WHERE Id_Vendedor IN(lista)
>
> 'Aqui me envia un error..
> Conversion failed when converting the nvarchar value '1,4' to data type
> smallint.
> Lo que no entiendo porque desde un texto en un Command no tengo ningún
> problema, solo cuando lo ejecuto directamente en el Store Procedure.



La diferencia no está en que se trate de un stored procedure o de un
command, sino en que se use parametrización o Sql Dinámico. En tu command
estás usando sql dinámico (concatenando el texto en la sentencia), mientras
que en el stored procedure estás usando un parámetro en la sentencia, cosa
que no es lÃ***cita para pasar la lista de valores de un IN.
Si utilizases parámetros en el Command, te fallarÃ***a igual que el stored
procedure. Y si usas Sql dinámico en el stored procedure (concatenando el
texto y ejecutándolo con EXEC o con sp_executesql), te funcionará igual que
tu command.

Responder Con Cita
  #5 (permalink)  
Antiguo 28-08-2008, 17:32:01
Manolo Zepeda
 
Mensajes: n/a
Predeterminado Re: Clausula IN


Que tal Alberto.
Gracias por tu atención a mi mensaje.
Entonces la única forma de mandar valores para una clausila IN mediante un
parametro serÃ***a con Sql dinámico?

Saludos
Responder Con Cita
  #6 (permalink)  
Antiguo 28-08-2008, 17:32:01
Manolo Zepeda
 
Mensajes: n/a
Predeterminado Re: Clausula IN


Que tal Alberto.
Gracias por tu atención a mi mensaje.
Entonces la única forma de mandar valores para una clausila IN mediante un
parametro serÃ***a con Sql dinámico?

Saludos
Responder Con Cita
  #7 (permalink)  
Antiguo 28-08-2008, 17:32:01
Manolo Zepeda
 
Mensajes: n/a
Predeterminado Re: Clausula IN


Que tal Alberto.
Gracias por tu atención a mi mensaje.
Entonces la única forma de mandar valores para una clausila IN mediante un
parametro serÃ***a con Sql dinámico?

Saludos
Responder Con Cita
  #8 (permalink)  
Antiguo 28-08-2008, 18:23:17
Alberto Poblacion
 
Mensajes: n/a
Predeterminado Re: Clausula IN

"Manolo Zepeda" <ManoloZepeda***discussions.microsoft.com> wrote in message
news:6E1F76B2-5AA1-426C-9BCE-4A0C13B646B2***microsoft.com...
> Gracias por tu atención a mi mensaje.
> Entonces la única forma de mandar valores para una clausila IN mediante un
> parametro serÃ***a con Sql dinámico?


Me temo que sÃ***. Si te da reparo el Sql Dinámico (por razones de
protección contra inyecciones de Sql, optimización de procedimientos
precompilados, etc.), lo que hay que hacer es buscar una alternativa al IN.
Una posibilidad es pasar los valores del IN en un parámetro de tipo XML y
luego usar los operadores de manejo de XML del Sql Server 2005 para
condicionar la sentencia Select. Otra posibilidad es pasar los valores del
IN en una tabla temporal, y usar un Join en lugar del IN, o una subcláusula,
para filtrar el select principal con la tabla temporal.

Responder Con Cita
  #9 (permalink)  
Antiguo 28-08-2008, 18:23:17
Alberto Poblacion
 
Mensajes: n/a
Predeterminado Re: Clausula IN

"Manolo Zepeda" <ManoloZepeda***discussions.microsoft.com> wrote in message
news:6E1F76B2-5AA1-426C-9BCE-4A0C13B646B2***microsoft.com...
> Gracias por tu atención a mi mensaje.
> Entonces la única forma de mandar valores para una clausila IN mediante un
> parametro serÃ***a con Sql dinámico?


Me temo que sÃ***. Si te da reparo el Sql Dinámico (por razones de
protección contra inyecciones de Sql, optimización de procedimientos
precompilados, etc.), lo que hay que hacer es buscar una alternativa al IN.
Una posibilidad es pasar los valores del IN en un parámetro de tipo XML y
luego usar los operadores de manejo de XML del Sql Server 2005 para
condicionar la sentencia Select. Otra posibilidad es pasar los valores del
IN en una tabla temporal, y usar un Join en lugar del IN, o una subcláusula,
para filtrar el select principal con la tabla temporal.

Responder Con Cita
  #10 (permalink)  
Antiguo 28-08-2008, 18:23:17
Alberto Poblacion
 
Mensajes: n/a
Predeterminado Re: Clausula IN

"Manolo Zepeda" <ManoloZepeda***discussions.microsoft.com> wrote in message
news:6E1F76B2-5AA1-426C-9BCE-4A0C13B646B2***microsoft.com...
> Gracias por tu atención a mi mensaje.
> Entonces la única forma de mandar valores para una clausila IN mediante un
> parametro serÃ***a con Sql dinámico?


Me temo que sÃ***. Si te da reparo el Sql Dinámico (por razones de
protección contra inyecciones de Sql, optimización de procedimientos
precompilados, etc.), lo que hay que hacer es buscar una alternativa al IN.
Una posibilidad es pasar los valores del IN en un parámetro de tipo XML y
luego usar los operadores de manejo de XML del Sql Server 2005 para
condicionar la sentencia Select. Otra posibilidad es pasar los valores del
IN en una tabla temporal, y usar un Join en lugar del IN, o una subcláusula,
para filtrar el select principal con la tabla temporal.

Responder Con Cita
 
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo almacenar una Cláusula WHERE en una variable Faiverlgr Newsgroup microsoft.public.es.vfoxpro 6 24-04-2008 00:16:02
restriccion en clausula IN ?? DarthSidious Newsgroup microsoft.public.es.sqlserver 2 05-03-2008 13:12:01
Clausula SELECT daniel Newsgroup microsoft.public.es.sqlserver 4 03-02-2008 21:34:53
clausula group by Mayo Newsgroup microsoft.public.es.vfoxpro.datos 6 12-04-2006 15:09:39





Powered by: vBulletin, Versión 3.6.8
Derechos de Autor ©2000 - 2008, Jelsoft Enterprises Ltd.

LinkBacks Enabled by vBSEO 3.1.0 © 2007, Crawlability, Inc.