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

[SOLUCIONADO] Select con condición "in"

Estas en el tema de Select con condición "in" en el foro de SQL Server en Foros del Web. Hola, Estoy intentando ejecutar un SELECT para obtener ciertos registros con la condición IN pero no logro que me salga... He intentado de estas dos ...
  #1 (permalink)  
Antiguo 18/07/2015, 17:32
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 9 años, 10 meses
Puntos: 0
Pregunta Select con condición "in"

Hola,

Estoy intentando ejecutar un SELECT para obtener ciertos registros con la condición IN pero no logro que me salga...

He intentado de estas dos formas y ninguna me funciona:

Código SQL:
Ver original
  1. DECLARE @ids VARCHAR(10)
  2. SET @ids = '1,2'
  3. SELECT * FROM Usuarios WHERE (id IN (@ids))

Código SQL:
Ver original
  1. DECLARE @ids VARCHAR(10)
  2. SET @ids = '''1'',''2'''
  3. SELECT * FROM Usuarios WHERE (id IN (@ids))
Espero puedan ayudarme.

Saludos.

Última edición por gnzsoloyo; 18/07/2015 a las 18:45 Razón: Pesimo etiquetado de codigo. Usar Highlights por favor..
  #2 (permalink)  
Antiguo 18/07/2015, 17:42
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: Select con condición "in"

a ver vamos por partes, sql server no almacena los valores de una variable como un array, porque?? porque un array es una tabla :) ahora para hacer lo que quieres hay algunas maneras:

Código SQL:
Ver original
  1. DECLARE @ids VARCHAR(10)
  2. DECLARE @query Nvarchar(MAX)
  3. SET @ids = '1,2'
  4.  
  5. SET @query= 'SELECT * FROM Usuarios WHERE id IN ( ' + @ids + ')'
  6. sp_executesql @query

otra manera:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id INT
  4. )
  5.  
  6. INSERT INTO #temp VALUES (1)
  7. INSERT INTO #temp VALUES (2)
  8.  
  9. SELECT * FROM usuarios WHERE id IN (SELECT id FROM #temp)

o la mas completa:

Código SQL:
Ver original
  1. /****** Object:  UserDefinedFunction [dbo].[SplitApplication]    Script Date: 10/19/2010 15:12:35 ******/
  2. SET ANSI_NULLS ON
  3. GO
  4.  
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7.  
  8. CREATE FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(2000))
  9.  
  10. RETURNS @RtnValue TABLE
  11. (
  12. Id INT IDENTITY(1,1),
  13. DATA nvarchar(100)
  14. )
  15. AS
  16. BEGIN
  17. DECLARE @Cnt INT, @SplitOn nvarchar(5)
  18. SET @SplitOn = ','
  19. SET @Cnt = 1
  20.  
  21. While (Charindex(@SplitOn,@applicationid)>0)
  22. BEGIN
  23. INSERT INTO @RtnValue (DATA)
  24. SELECT
  25. DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-1)))
  26.  
  27. SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+1,len(@applicationid))
  28. SET @Cnt = @Cnt + 1
  29. END
  30.  
  31. INSERT INTO @RtnValue (DATA)
  32. SELECT DATA = ltrim(rtrim(@applicationid))
  33.  
  34. RETURN
  35. END
  36.  
  37. GO

Como usar la funcion


Código SQL:
Ver original
  1. DECLARE @ids VARCHAR(10)
  2. SET @ids = '1,2'
  3. SELECT * FROM Usuarios WHERE (id IN (SELECT * FROM SplitApplication(@ids)) )


saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 18/07/2015, 17:49
 
Fecha de Ingreso: junio-2014
Mensajes: 18
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Select con condición "in"

Muchas gracias, Libras.

Creo que me iré por la primer manera.

:)

Etiquetas: condición, registro, select
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 17:47.