Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Store procedura como consultyar where in varios valores

Estas en el tema de Store procedura como consultyar where in varios valores en el foro de SQL Server en Foros del Web. Hola, Tengo un store procedure, en el cual tengo una instruccion where Optimas.Codigo in (@codigo) <-Los codigos tienen q ser numericos ya que asi eta ...
  #1 (permalink)  
Antiguo 05/09/2012, 10:17
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Store procedura como consultyar where in varios valores

Hola, Tengo un store procedure, en el cual tengo una instruccion
where
Optimas.Codigo in (@codigo) <-Los codigos tienen q ser numericos ya que asi eta definiada esa columna, como se ve es una consulta where para ingresar varios valores numericos pero nose como ya que no me lo permite, lo pase a varchar y ni aun asi. Les muestro mi store:
Código SQL:
Ver original
  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. -- =============================================
  6. -- Author:      <Franco Luis Roberto>
  7. -- Create date: <05-Sep-2012>
  8. -- Description: <Show information of all lines,>
  9. -- =============================================
  10. ALTER PROCEDURE Report_All_Lines
  11.    
  12. @codigo VARCHAR(500),
  13. @StartDate Datetime,
  14. @EndDate Datetime  
  15.  
  16. AS
  17. BEGIN
  18.     -- SET NOCOUNT ON added to prevent extra result sets from
  19.     -- interfering with SELECT statements.
  20.     SET NOCOUNT ON;
  21.  
  22.    
  23. SELECT dbo.Optimas.Linea, dbo.pesos.Peso,dbo.htargets.Target, dbo.HTargets.Marca, dbo.pesos.Vaso, dbo.Optimas.Tubo, dbo.pesos.Hora
  24.  
  25. FROM pesos
  26. INNER JOIN Optimas ON optimas.codigo = pesos.codoptima
  27. INNER JOIN htargets ON optimas.codigo = htargets.codoptima
  28. WHERE
  29. optimas.codigo IN(@codigo)
  30.  
  31.  
  32. AND    
  33. dbo.pesos.fecha >=@StartDate AND dbo.pesos.fecha <=@EndDate
  34. AND
  35. dbo.htargets.Fecha >=@StartDate AND dbo.htargets.fecha <=@EndDate
  36.  
  37.  
  38. END
  39. GO
Si lo ejecuto asi:
Código SQL:
Ver original
  1. EXEC Report_All_Lines  '99','9/3/2012 11:00 AM','9/3/2012 12:00 PM'
Si me muestra datos, pero si le paso 2 parametros en codigo no me deja:

Código SQL:
Ver original
  1. EXEC Report_All_Lines  '99,84','9/3/2012 11:00 AM','9/3/2012 12:00 PM'
Código:
Msg 245, Level 16, State 1, Procedure Report_All_Lines, Line 19
Conversion failed when converting the varchar value '99,84' to data type int
.
Pueden por favor decirme si hay alguna manera de pasarle varios parametros sin la necesidad de tener que cambiar el tipo de dato de la columna codigo?
  #2 (permalink)  
Antiguo 05/09/2012, 10:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Store procedura como consultyar where in varios valores

Necesitas utilizar QUERY DINAMICO, con sus pro y contras.
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 05/09/2012, 11:59
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Store procedura como consultyar where in varios valores

En lugar de SQL dinamico, intenta la solución en este hilo:
http://www.forosdelweb.com/f87/consu...9/#post4259911
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 05/09/2012, 12:04
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Store procedura como consultyar where in varios valores

iislas,
No entendi muy bien, pero nose si funcionaria que en esta parte:
optimas.codigo IN(@codigo)
se pudieran eliminar las comillas para q pasaran solo como enteros es decir en lugar de llegar ahi asi: '1,2,3,4' que llegaran y se las quitara para pasarlo a: 1,2,3,4
es posible?
Saludos
  #5 (permalink)  
Antiguo 05/09/2012, 12:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Store procedura como consultyar where in varios valores

Gracias por el apoyo, ya me quedo, me quedo asi:
Código SQL:
Ver original
  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. -- =============================================
  6. -- Author:      <Franco Luis Roberto>
  7. -- Create date: <05-Sep-2012>
  8. -- Description: <Show information of all lines,>
  9. -- =============================================
  10. ALTER PROCEDURE Report_All_Lines
  11.    
  12. @codigo nvarchar(500),
  13. @StartDate nvarchar (50),
  14. @EndDate nvarchar(81)  
  15.  
  16. AS
  17. BEGIN
  18.     -- SET NOCOUNT ON added to prevent extra result sets from
  19.     -- interfering with SELECT statements.
  20.     SET NOCOUNT ON;
  21.  
  22.   DECLARE  @MySQL VARCHAR(2000)
  23. SET @MySQL='SELECT dbo.Optimas.Linea, dbo.pesos.Peso,dbo.htargets.Target, dbo.HTargets.Marca, dbo.pesos.Vaso, dbo.Optimas.Tubo, dbo.pesos.Hora from pesos inner join Optimas on optimas.codigo = pesos.codoptima inner join htargets on optimas.codigo = htargets.codoptima where optimas.codigo in('+@codigo+') and dbo.pesos.fecha >= '''+@StartDate+''' and dbo.pesos.fecha <= '''+@EndDate+''' and dbo.htargets.Fecha >= '''+@StartDate+''' and dbo.htargets.fecha <= '''+@EndDate+'''order by linea'
  24.  EXEC(@MySQL)
  25.  
  26. END
  27. GO
Saludos
  #6 (permalink)  
Antiguo 06/09/2012, 10:14
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Store procedura como consultyar where in varios valores

¿Que tan eficiente es tu query?
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 06/09/2012, 10:30
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Store procedura como consultyar where in varios valores

iislas,
Pues tan eficiente que hace lo que realmente necesito, no es lenta, no tengo incongruencia de datos ni nada.
¿Porque? Esta mal? o ves algun problema q pudiera tener :(

Basicamente es la misma query solo que concatenada en un string.
Saludos.
  #8 (permalink)  
Antiguo 06/09/2012, 12:45
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Store procedura como consultyar where in varios valores

Si bueno, una cosa es que obtengas lo que necesitas en un tiempo considerable, me explico, un reporte en sql server que tarda 15 minutos es "eficiente" porque se obtiene lo que se necesita, pero si este reporte saliera en menos tiempo, seria lo indicado.

¿Tuviste tiempo de evaluar la opcion que te recomendo GeriReshef?

¿De cauntos registros se conforma tu tabla?
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 06/09/2012, 12:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Store procedura como consultyar where in varios valores

parece que no reviso el link jejejeje
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 06/09/2012, 13:26
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Store procedura como consultyar where in varios valores

iislas perdon, apenas vi el post de GeriReshef
Sobre la cantidad de registros, son muchos, y crece cada dia, la ultima vez que lo depure tenia 250 millones de registros, pero en una consulta puedes limitar los registros dependiendo el rango de fecta etc.....
Ahorita he sacadod atos de 3mil registros y no se tarda nada. Anteriormente lo tenian con algo llamado OLAP. Pero yo nio he implementado eso.
Saludos

Etiquetas: select, store
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:35.