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)
假设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)
戈登删除了他的答案(可能是因为有人给了我们每个人一个毫无意义的投票),但他的方法也有效(假设你处理的情况是有人在他们的列表中有空格,例如23, 24
):
SELECT TestInt, TestName
FROM @tmp_Example
WHERE ','+REPLACE(@testEx, ' ', '')+','
LIKE '%,'+cast(TestInt as varchar(255))+',%';
Run Code Online (Sandbox Code Playgroud)