0

考虑下表:

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;

我遇到了有人可能想要为 TestInt 选择多个结果的情况,我收到的结果是这样的:

('23,24')

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

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

SELECT * from @tmp_Example
WHERE TestInt = CAST(dbo.Split(@testEx,',') AS int);
4

1 回答 1

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;

SQLfiddle 演示

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

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

SQLfiddle 演示

于 2013-07-26T16:14:53.473 回答