2013-07-26 45 views
0

考慮下面的表中選擇查詢多個整數:從VARCHAR

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); 

回答

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 demo

Gordon刪除了他的答案(可能是因爲我們每個人都有一個無知的倒票,某人給了我們),但他的方法也有效(假設你處理的情況是某人有空位例如, 23, 24):

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

SQLfiddle demo

+0

謝謝你,林不知道誰去的downvote大禮包,但是這是我期待的 –