从varchar中选择查询中的多个int

Jas*_*ldo 0 sql sql-server-2012

请考虑下表:

DECLARE @tmp_Example 
TABLE (
    TestInt int,
    TestName varchar(max)
  );

INSERT INTO @tmp_Example (TestInt, TestName)
VALUES (22,'Bob'),
(23,'James'),
(24,'Joe');

SELECT * from @tmp_Example
WHERE TestInt = 23;
Run Code Online (Sandbox Code Playgroud)

我正在进入有些人可能想为TestInt选择多个结果的情况,我收到它是这样的:

('23,24')
Run Code Online (Sandbox Code Playgroud)

在不更改表格架构的情况下,我如何支持这样的查询?我像这样摆弄它:

DECLARE @testEx as varchar(max) = '23,24';

SELECT * from @tmp_Example
WHERE TestInt = CAST(dbo.Split(@testEx,',') AS int);
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

假设dbo.Split我认为它是一个表值函数,它将在它们自己的行中返回整数23和24:

SELECT t.TestInt, t.TestName
FROM @tmp_Example AS t
INNER JOIN dbo.Split(@testEx, ',') AS s
ON t.TestInt = s.OutputColumnName;
Run Code Online (Sandbox Code Playgroud)

SQLfiddle演示

戈登删除了他的答案(可能是因为有人给了我们每个一个毫无意义的投票),但他的方法也有效(假设你处理的情况是有人在他们的列表中有空格,例如23, 24):

SELECT TestInt, TestName
FROM @tmp_Example
WHERE ','+REPLACE(@testEx, ' ', '')+',' 
  LIKE '%,'+cast(TestInt as varchar(255))+',%';
Run Code Online (Sandbox Code Playgroud)

SQLfiddle演示