-5

我的应用程序中有一个搜索字段,并且我正在使用 SQL。

我的应用程序有 3 个独立ComboBox的 es,允许用户选择他/她想要搜索的内容。

例如,我们有,Name在搜索字段中,我想选择有 的人或有的人。family nameageage 20age 20 and named "john" or other states

那么我应该使用IF, ELSE,的一般程序WHERE来支持所有这些状态吗?

4

5 回答 5

1

假设变量@Age,@Name@FamilyName

SELECT *
FROM tbl
WHERE
    (@Age IS NULL OR Age == @Age)
    AND (@Name IS NULL OR Name LIKE '%' + @Name + '%')
    AND (@FamilyName IS NULL OR FamilyName LIKE '%' + @FamilyName+ '%')

不需要做if。但是如果你想在 sql 中做一个 IF 它是CASE WHEN <true state> THEN <true action> ELSE <false action> END

于 2013-03-15T09:47:38.677 回答
0

sql 中 If-Else 的语法是

IF yourconditon
BEGIN
  //sql query
END
ELSE
  BEGIN
     //sqlquery
   End
于 2013-03-15T09:47:27.293 回答
0

你如何在数据库中执行你的sql?它是数据库中的存储过程,还是您只是将 sql 语句发送到数据库。

如果是第二个,只需在您的 c# 代码中执行 if-then-else 操作并将不同的 sql 语句发送到您的数据库。

于 2013-03-15T09:51:55.110 回答
0

您有几个不同的选择,并且建议对两者进行性能测试(一如既往)。

  1. 动态 SQL。

根据使用的参数动态构建 SQL,所以;

declare sqlTxt VARCHAR(max)
delcare params VARCHAR(128)

params = 'Age INT, Name VARCHAR(128), FamilyName VARCHAR(128)'
sqlText = 'SELECT field Name From Table WHERE 1=1'

IF (IS NOT NULL) sqlText += 'AND Age == @Age '
IF (IS NOT NULL) sqlText += 'AND Name LIKE %@Name%'
IF (IS NOT NULL) sqlText += 'AND FamilyName LIKE %FamilyName%'

EXEC sp_executesql @sqlText, @params, @Age = @Age, @Name = @Name, @FamilyName = @FamilyName
  1. SQL 中的句柄

使用 Eli Gassert 发布的解决方案。

一般来说,对于较小的查询,您应该可以使用选项 2,但如果您扩展搜索以包含许多不同的参数,请注意“参数嗅探”,这可能会减慢您的速度。

如果性能是一个问题,基本上测试两种方式。

于 2013-03-15T09:54:15.673 回答
-1

您应该做的是根据用户选择的内容在您的 Windows 项目中创建 SQL。

StringBuilder mySQL = new StringBuilder();

if(Name != "")
  mySQL.Append("Name like '%" + Name + "'%");

if(mySQL != "" && (familyName != "" || age != ""))
  mySQL.Append(" AND");

if(familyName != "")
  mySQL.Append(" familyName like '%" + familyName + "%');

并继续你的其他条件。将 stringbuilder 字符串附加到您的 SELECT 查询中。

string finalSQL = "SELECT * FROM MyTable WHERE " + mySQL.toString();
于 2013-03-15T09:51:55.513 回答