2010-03-25 24 views
0

假設存在具有其是多值的列AccessRights(例如,在它的值以這種格式STOLI表格中的多值列值比較,HELP,BRANCH(逗號分隔的字符串)在SQL數據庫表

現在一個存儲過程是針對這個表寫的,以便根據發送給SP的AccessRight參數獲取記錄。 讓參數爲@AccessRights,這也是一個逗號分隔的字符串,它可能具有像STOLI,BRANCH,HELPLINE等的值

現在我想比較參數@AccessRights的各個值與列AccessRights。

當前方法是我使用用戶定義函數分割分割逗號分隔字符串(@AccessRights)。 而我得到了一個表變量單值(只包含一列「accessGroup」),個體值在列名accessGroup下表變量,我用下面的代碼SP比較

Where AccessRights like '%'+accessGroup+'%' 

現在,如果用戶傳遞參數(HELP,OLI)而不是(HELP,STOLI),則SP將提供輸出。 應該做什麼比較,以便該子字符串OLI不會給STOLI的輸出

回答

1

下面的技巧應該這樣做(自我描述):

WHERE (',' + AccessRights + ',') LIKE ('%,' + accessGroup + ',%') 

但最好雙方分成表表和比較值。

+0

它也適用於字符串中的最後一項嗎? – htaler 2010-03-25 12:43:45

+0

爲什麼不呢?正如你所看到的,訣竅是在每個字符串周圍(逗號),然後做一個完整的字符串匹配而不是部分的(假設'accessGroup'不包含逗號 – van 2010-03-25 13:57:56

1

拆分這兩個集合,將它們存儲在臨時#tables並加入它們。