2014-12-02 73 views
0

我正在使用sql server,c#,asp.net。我正在做一個項目,根據用戶的許可,從數據庫中動態顯示菜單。截至目前這裏是我的存儲過程,存儲過程動態where子句,從變量獲取值

Create Proc spGetMenuData 
as 
Begin 
Select * from tblMenu1 
End 

我有我的數據庫上的用戶表,角色表和菜單表。 Users:userid,username,pass,roleid 角色:roleid,name(admin,user) 菜單:menuid,name,url,roleid,userid或者menuid,name,url,roleid(請告訴我,如果什麼更合適) 現在,我想要的是獲取userid和他的roleid來檢查菜單。我可以將用戶標識存儲在我的程序中的一個變量中,並將其傳遞給我的存儲過程。 贊:

Create Proc spGetMenuData 
as 
Begin 
Select * from tblMenu1 //(WHERE tblMenu1.userid = useridfromthevariable and tblMenu1.roleid = useridfromthevariable's roleid) 
End 

請幫助我,我只是一個初學者。 在此先感謝!

+0

嘗試usersmenu創建表,而不是爲你的許多MENU依靠的許多表? – zxc 2014-12-02 01:00:02

+0

這是tblMenu1不是菜單,對不起。這是我的用戶菜單。 – missellorin 2014-12-02 01:01:58

回答

1

這裏是我會做什麼:
用戶表:user_ID的,用戶名,傳球,ROLE_ID
角色表:ROLE_ID,ROLE_NAME
Menu_Roles表:ROLE_ID,menu_id
菜單表:menu_id,名稱,網址
然後,我會指定菜單屬於一個角色並且具有屬於用戶的角色。
然後拿到menu_id,名稱和URL給定用戶:

CREATE PROCEDURE getMenus 
    @someUserName 
AS 

    SET NOCOUNT ON; 
    SELECT menu_id, name, url FROM menus WHERE menu_id 
    IN (select menu_id from users 
JOIN menu_roles ON users.role_id=menu_roles.role_id WHERE [email protected]) 
GO 
+0

如何執行存儲過程的@someuserName變量?而且您無法從用戶選擇menu_id – missellorin 2014-12-02 01:46:53

+0

您將其從C#應用程序傳遞到存儲過程。在存儲過程的開始處,然後聲明它,例如@someUsername VARCHAR(100)。你也是正確的,menu_id不在用戶中,應該讀取role_id。我會編輯它。 – 2014-12-02 01:52:00

+0

你會推薦我做簡單的命令而不是存儲過程嗎? – missellorin 2014-12-02 01:58:05