2014-11-25 96 views
0

選擇缺少的行我有一個SQL表像下面的使用SQL LIKE

RoleId  Roles 
------------------------------------------ 
    1   Administrators Viewers Users Managers 
    2   Administrators Viewers Managers 
    3   Administrators 
    4   Viewers 

我需要得到一個基於角色的RoleId的。我將每個角色都視爲一個字符串。

所以,當我使用下面的查詢

SELECT * 
FROM Roles 
WHERE Roles like '%Administrators Viewers Managers%' 

我得到的只有前兩排

RoleId  Roles 
-------------------------------------------------- 
    1   Administrators Viewers Users Managers 
    2   Administrators Viewers Managers 

但我需要它,因爲它包含了AdministratorsViewers太獲取剩餘的行。 我實際上使用存儲過程來提供角色作爲參數。所以它並不總是一樣的。 其動態。我不能使用OR。我需要一個適用於任何參數的解決方案。

INLIKE子句之間是否有組合?

要不我怎麼能繼續

+3

嗯,這是一個有興趣的方法,但似乎不喜歡一個很好的長期解決方案。我想理想情況下你會有兩張桌子,這會讓你稍後變得更加靈活......即。角色和權限...即。 'ROLES TABLE:roleID 1 = Admin,roleID 2 = Viewer' 'PERMISSIONS TABLE:roleID = 1,view = yes,admin = yes,edit = yes; roleId = 2,view = yes,admin = no,edit = no'。然後你就可以做更復雜的查詢。 – timh 2014-11-25 10:18:38

+0

如何獲得第1行的查詢? – 2014-11-25 10:18:46

+0

上面提供的腳本不會記錄'管理員查看者用戶管理器',因爲'用戶'沒有在您的LIKE子句中指定。如果你的參數是動態的,我會建議DSQL。聲明一個參數,寫出你的查詢並執行。但我不確定如何將參數分成3個(管理員/查看者/管理員)變量。 – PKirby 2014-11-25 10:41:57

回答

2

您可以使用OR

SELECT * 
FROM Roles 
WHERE Roles like '%Administrators%' 
OR Roles like '%Viewers%' 
+0

我實際上使用存儲過程來提供角色作爲參數。所以它並不總是一樣的。它的動態。 – 2014-11-25 10:21:29

+1

@Targarian:那麼參數是什麼類型?我會規範你的表格。創建另一個表來存儲屬於角色的「子角色」。 – 2014-11-25 10:28:42

0
SELECT * FROM Roles 
WHERE Roles like '%Administrators%' OR Roles like '%Viewers%' 
OR Roles like '%Administrators Viewers%' 
+0

您可以添加一些額外的信息以及答案嗎? – Max 2014-11-25 10:59:42

+0

由於前兩個,不是第三個LIKE是完全多餘的嗎? – Mike 2014-11-25 15:56:19

0

如果dynamically通過roles作爲參數使用,如下面的查詢 爲

SQL Server 2000及以上版本

SELECT * 
FROM Roles 
WHERE Roles like '%'[email protected]+'%' 

SQL Server 2008和以上

SELECT * 
FROM Roles 
WHERE Contains(Roles,@Roles) 

,但上面的查詢會產生只是基於roles你已經通過了結果