2014-11-14 58 views
0

我有一個表結構爲這樣的選擇所有的ID到臨時表:SQL根據逗號分隔的字符串

| ID | Name | 
| 1 | Bob | 
| 2 | Jim | 
| 3 | Jane | 
    .  . 
    .  . 
    .  . 

我想編寫一個查詢將返回名字的所有ID的,我會正在通過。請注意,名稱將以逗號分隔的字符串形式傳遞。

我試着查詢:

@Names = 'Bob, Jane'

select ID into #Ids from Users where Name in ((select i.Item from dbo.Split(@Names, ',', 0) as i))

我希望得到是:

| ID | 
| 1 | 
| 3 | 

而是我只是得到:

| ID | 
| 1 | 

我將不得不循環這個查詢,但是這樣做的最好方法是什麼?我正確地處理這個問題嗎?

+0

這是什麼_select i.Item從dbo.Split之前刪除尾隨空格(0 @names, '')_回報? – jpw 2014-11-14 23:25:04

+0

@jpw將字符串'Bob,Jane'作爲表返回。 Row [0] = Bob,Row [1] = Jane等 – KidBatman 2014-11-14 23:29:10

+1

你可以嘗試刪除'((從io中選擇i.Item作爲dbo.Split(@Names,',',0)的雙括號)) ' – Florent 2014-11-14 23:43:55

回答

0

問題可能是split function輸出中的尾隨空格。

逗號後有空格。它應該被刪除,因爲在SQL Server中只有=運算符在進行比較時忽略尾隨空格。使用LtrimRtrim功能爲我)做比較

SELECT ID 
INTO #Ids 
FROM Users 
WHERE NAME IN ((SELECT rtrim(ltrim(i.Item)) 
       FROM dbo.Split(@Names, ',', 0) AS i))