Option 1 (first part ripped directly from Adam Machanic's Blog)
DECLARE @number_of_numbers INT = 100000;
;WITH
a AS (SELECT 1 AS i UNION ALL SELECT 1),
b AS (SELECT 1 AS i FROM a AS x, a AS y),
c AS (SELECT 1 AS i FROM b AS x, b AS y),
d AS (SELECT 1 AS i FROM c AS x, c AS y),
e AS (SELECT 1 AS i FROM d AS x, d AS y),
f AS (SELECT 1 AS i FROM e AS x, e AS y),
numbers AS
(
SELECT TOP(@number_of_numbers)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS number
FROM f
)
SELECT [your],[required],[columns],[here]
FROM Person where Person.ixPerson in (select number from numbers);
Of course, this is just one way to create a numbers table. If you're looking for a random assortment of ids, you can populate a numbers table real quick by using a table variable or something. But then you'd have to separate the list in your code or with a UDF as billinkc proposed at which point in time it might just be better to construct the IN clause.
Option 2 (using the answer by @CadeRoux here):
CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
);
declare @nums nvarchar(100);
set @nums = N'1,2,5,10,87';
SELECT [your],[required],[columns],[here]
FROM Person where Person.ixPerson in (select CAST(s AS INTEGER) s from dbo.Split(N',',@nums));