2017-08-11 69 views
1

值這是導致我想:SQL服務器 - 如何選擇記錄下我在拆柱

enter image description here

我寫了一個存儲過程:

ALTER PROCEDURE [dbo].[test_Split] 
    @item INT 
AS 
    CREATE TABLE #temp 
    (
     Id INT, 
     Name NVARCHAR(50), 
     List NVARCHAR(100) 
    ) 

    INSERT INTO #temp 
    VALUES (1, 'John', '1,2,4,6,7'), (2, 'Fox', '7,23,42,10,17'), 
      (3, 'Rose', '51,72,14,16,37'), (4, 'Alex', '1,22,84,56,47') 

    SELECT * 
    FROM #temp 

當我執行test_Split,我得到了屏幕截圖中顯示的結果。

當我通過@item = 1(任意數字)時,我想要得到像截圖右邊部分(List列包含我的值)的結果。

有沒有辦法做到這一點沒有功能?

回答

1

只需添加

where List like + '%' + @item + '%' 

所以......

select * 
from #temp 
where List like + '%' + @item + '%' 

聲明本會發現所有行,其中1存在。區分1和15之類的數字的唯一方法是搜索逗號。

select * 
from #temp 
where 
List like + '%,' + @item + ',%' 
or List like + @item + ',%' 
or List like + '%,' + @item 

使用分割功能和INNER JOIN明智得多。 我想看看Jeff's article

+0

我在想這樣,但是當'List'包含值'11'或其他bumber包含'1'值時。 –

+0

查看我的編輯@ M.Rashford。特別是最後一個查詢 – scsimon

+1

我讀了你的更新。我試着讓'List'列至少有1個','characters =)) –