使用带运算符的大小写(=,LIKE)

时间:2015-10-31 07:53:17

标签: sql sql-server

我想通过从下拉列表中选择包含=LIKE的值来运行查询。

这是html: -

 <td valign="left" width="20%">
                    <asp:DropDownList ID="ddlmathsign" runat="server" Style="width: 30%; background-repeat: no-repeat;
                        background-position: bottom right; border: solid 1px #ACACAC; font-family: Tahoma,Arial,Helvetica,Geneva,sans-serif">
                        <asp:ListItem Value="Equal">=</asp:ListItem>
                        <asp:ListItem Value="LIKE">LIKE</asp:ListItem>
                    </asp:DropDownList>
                </td>

我希望根据用户从列表中选择的操作符来查询Current_Item_Batch

select * from WMS_BIN_STATUS_TRACK where location_name='A1132' or Current_Item_code='4059010' or (CASE WHEN Current_Item_Batch = 'what query should come here ???'

我尝试使用以下查询case,但它对我不起作用

"select * from WMS_BIN_STATUS_TRACK where " +
                     "location_name='" + ddlBin.SelectedValue + "' or Current_Item_code='" + ddlItem.SelectedValue + "' or "+
                     "(CASE WHEN Current_Item_Batch = " + ddlmathsign.SelectedValue + " then Current_Item_Batch='" + txtBatch.Text + "'";

请说明这里出了什么问题

我正在使用 SQL server 2005

1 个答案:

答案 0 :(得分:1)

我不在电脑前,但这是一个想法。这当然只是一个伪代码,但您将看到如何构造语句而不是case表达式:

or (@selecteditem = 'equal' and Current_Item_Batch = 'txtBatch.Text')
or (@selecteditem = 'like' and Current_Item_Batch like '%txtBatch.Text%')

或者你可以动态生成sql语句:

..."' or Current_Item_Batch " +
      ddl.selectedvalue == "equal" ? (" = '" + txtBatch.Text + "'") :
                                     (" like '%" + txtBatch.Text + "%'")

在处理这样的陈述时,总要考虑注射威胁。