Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/07/2015, 17:42
Avatar de Libras
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