我只是学习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)
但是如果用户输入All
或World
或WHERE
子句中的空字符串,我会遇到问题,我希望查询返回所有行。是否可以通过编写另一个查询来处理上述????
我正在使用带有像这样的数据源的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
我知道我可以做这个应用程序方面,但如果在查询本身中这是可能的话,我只是好奇。
答案 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
。