2015-12-03 81 views
-1

同時通過代碼進行調試時,我得到錯誤的無效的列名Menu_mkey

無效的列名Menu_mkey

以下是一個

string strsqlflag = "select count(*) from WMS_User_Rights where User_Id='" + Hid_Selected_user.Value + "' and delete_flag='N' "; 


     if (Dt.Rows[e.Row.RowIndex]["child_menu_mkey"].ToString() == "0") 
     { 
      strsqlflag += " and MENU_MKEY = '" + Dt.Rows[e.Row.RowIndex]["MKEY"] + "'"; 
     } 
     else 
     { 
      strsqlflag += " and MENU_MKEY = '" + Dt.Rows[e.Row.RowIndex]["child_menu_mkey"] + "'"; 
     } 
其產生的

代碼以下查詢

select count(*) from WMS_User_Rights where User_Id='1' and delete_flag='N' and MENU_MKEY = '1' 

現在,在這裏我也想要Menu_mkey,但問題是,它來自另一個表,它是從表WMS_menu_rights

如何實現這一目標?

在一個側面說明: - 我使用SQL-server 2005

+1

。利用[內部連接(https://technet.microsoft.com/en-us/library/ms190014(V = SQL的.105).aspx)從兩個表中選擇值。 –

回答

1

使用SQL Joins那些表中查詢鏈接。

爲例如:

string strsqlflag = "select count(*) from WMS_User_Rights Inner join WMS_Menu_Rights on WMS_User_Rights.somefield=WMS_Menu_Rights.somefield where WMS_User_Rights.User_Id='" + Hid_Selected_user.Value + "' and WMS_User_Rights.delete_flag='N' "; 

    if (Dt.Rows[e.Row.RowIndex]["child_menu_mkey"].ToString() == "0") 
    { 
     strsqlflag += " and WMS_Menu_Rights.MENU_MKEY = '" + Dt.Rows[e.Row.RowIndex]["MKEY"] + "'"; 
    } 
    else 
    { 
     strsqlflag += " and WMS_Menu_Rights.MENU_MKEY = '" + Dt.Rows[e.Row.RowIndex]["child_menu_mkey"] + "'"; 
    } 

這裏somefield查詢strsqlflag表示任何字段,它是在兩個表中常見的。

+0

由於'Ambiguous column name'delete_flag'.' – BNN

+0

錯誤,因此檢查更新的代碼。替換'delete_flag ='N'''WMS_User_Rights.delete_flag ='N''。 –

+0

是的,這是完美的工作。非常感謝。 – BNN

0

你將不得不爲此編寫一個INNER JOIN查詢:

select count(*) from WMS_User_Rights INNER JOIN WMS_menu_rights on WMS_menu_rights.someField = WMS_User_Rights.someField where User_Id='1' and delete_flag='N' and MENU_MKEY = '1'