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 originalDECLARE @ids VARCHAR(10)
DECLARE @query Nvarchar(MAX)
SET @ids = '1,2'
SET @query= 'SELECT * FROM Usuarios WHERE id IN ( ' + @ids + ')'
sp_executesql @query
otra manera:
Código SQL:
Ver originalCREATE TABLE #temp
(
id INT
)
INSERT INTO #temp VALUES (1)
INSERT INTO #temp VALUES (2)
SELECT * FROM usuarios WHERE id IN (SELECT id FROM #temp)
o la mas completa:
Código SQL:
Ver original/****** Object: UserDefinedFunction [dbo].[SplitApplication] Script Date: 10/19/2010 15:12:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(2000))
RETURNS @RtnValue TABLE
(
Id INT IDENTITY(1,1),
DATA nvarchar(100)
)
AS
BEGIN
DECLARE @Cnt INT, @SplitOn nvarchar(5)
SET @SplitOn = ','
SET @Cnt = 1
While (Charindex(@SplitOn,@applicationid)>0)
BEGIN
INSERT INTO @RtnValue (DATA)
SELECT
DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-1)))
SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+1,len(@applicationid))
SET @Cnt = @Cnt + 1
END
INSERT INTO @RtnValue (DATA)
SELECT DATA = ltrim(rtrim(@applicationid))
RETURN
END
GO
Como usar la funcion
Código SQL:
Ver originalDECLARE @ids VARCHAR(10)
SET @ids = '1,2'
SELECT * FROM Usuarios WHERE (id IN (SELECT * FROM SplitApplication(@ids)) )
saludos!