根据用户输入获取SQL中的所有记录

时间:2013-05-04 19:49:17

标签: sql sql-server

我只是学习SQL并遇到了困难。我的数据表看起来像这样

DBO DATA

Id | Name | Surname | Title  | Location
----------------------------------------
1  | xxx  | abc     | def    | London
2  | xxx  | abc     | def    | Oslo
3  | xxx  | abc     | def    | New York

现在我想得到id,姓名,头衔和姓氏,我使用这样的查询:

SELECT 
    Id, Name, Surname, Title 
FROM 
    DATA 
WHERE 
    Location = 'London' -- (this is user input)

但是如果用户输入AllWorldWHERE子句中的空字符串,我会遇到问题,我希望查询返回所有行。是否可以通过编写另一个查询来处理上述????

等特殊情况

我正在使用带有像这样的数据源的ASP.net

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:MainConnectionString %>" 
     SelectCommand="SELECT [Name], [Id], [Surname], [Title] FROM [DATA] WHERE [Location] = @Location)" >
   <SelectParameters>
       <asp:ControlParameter ControlID="Label1" Name="Location" 
            PropertyName="Text" Type="String" />
   </SelectParameters>
</asp:SqlDataSource>`

输入取决于网址localhost:56789/People/London/

的路径路径

相应的VB文件是

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If (Request.PathInfo.Length = 0) Then

    Else
        Dim t = Request.PathInfo.Substring(1)
        Label1.Text = t
    End If
End Sub

我知道我可以做这个应用程序方面,但如果在查询本身中这是可能的话,我只是好奇。

4 个答案:

答案 0 :(得分:2)

您只需添加

即可
or userInput in ('ALL','World','')

到你的where子句,其中userInput是用户的输入。

答案 1 :(得分:2)

如果您确实想在查询中执行此操作,请尝试以下操作:

SELECT 
    Id, Name, Surname, Tittle 
FROM 
    data 
WHERE 
    Location = <input> OR
    <input> in ('All', 'World', '')

答案 2 :(得分:2)

我这里没有SQL Server实例来确认这个sytax,但是你可以做类似的事情;

SELECT 
    Id, Name, Surname, Tittle 
FROM 
    data 
WHERE 
   case 
      when <input> = 'All' then 1=1 
      when <input> = 'World' then 1=1
      else location = <input>
   end

这是如何工作的,它使用了每个谓词(在where子句中)最高评估为TRUE的事实。 1 = 1始终为true,因此您将获得表中的所有行。当然,location =会过滤。

答案 3 :(得分:1)

你在说什么,你想根据用户输入的内容对要执行的查询应用一些规则。这超出了SQL的范围。

听起来您正在开发一个从用户那里获取输入的应用程序。该应用程序的工作是检查该输入以确定对数据库运行的SQL查询。因此,检查您的输入并在用户输入任何内容,“全部”或“世界”时执行SELECT * FROM DATA