使用组装标准的MS-SQL Server搜索表

时间:2013-08-20 01:22:12

标签: sql-server sql-server-2008

我有一个搜索页面,根据提名的标准返回结果,当每个条件为OR时,这可以正常工作,但是当我使用AND时,它返回错误或没有结果。例如,搜索条件可能是......

A. Author = ""
B. Subject = ""
C. Keyword = ""
D. Dated = ""

代码:

SELECT * 
FROM Table 
WHERE Author = '" & strAuthor & "' 
  AND Subject = '" & strSubject & "' 
  AND Keyword = '" & strKeyword & "' 
  AND Dated = '" & strDated & "' "

这里我只使用了4个参数,而实际上还有不少参数。但是这个例子应该解释这个问题...为了完成这项工作,我需要更加具体,例如“如果A和B”或“B,C和D”,但使用任何空白或NULL的参数将不起作用。

现在我可以使用像......这样的条件语句写入标准。

SELECT * 
FROM Table 
WHERE
    if strAuthor <> "" then 
        Author = '" & strAuthor & "'
    end if
    if strSubject <> "" then
        AND Subject = '" & strSubject & "'
    end if

等等,除了写这样的SELECT字符串不起作用外,只会产生错误,因为select字符串不能包含其他代码(这是我的发现)。

如果选项只有几个,我可以为每个组合编写单独的选择字符串,但有超过10个不同的标准需要超过3,628,800个组合!

有解决方法吗?

2 个答案:

答案 0 :(得分:0)

这里有2个选项:

a)创建一个存储过程并为所有列提供一些默认值,如果用户没有传递任何值,查询将使用该列的默认值运行。

b)在前端施加规则,以便始终为所有列选择一个值。

答案 1 :(得分:0)

使用此代码时不需要存储过程:

SQL = "SELECT * FROM Table WHERE ID <> ''"
    if len(strAuthor) > 3 then 
        SQL = SQL & " AND Author = '" & strAuthor & "'"
    end if
    if len(strSubject) > 3 then 
        SQL = SQL & " AND Subject LIKE '%" + Replace(strSubject, "'", "''") + "%'"
    end if  
    if len(strKeyword) > 3 then 
        SQL = SQL & " AND Description LIKE '%" + Replace(strKeyword, "'", "''") + "%'"
    end if  
    if strCatID <> "" then 
        SQL = SQL & " AND Category = '" & strCatID & "'"
    end if
SQL = SQL & " Order By Subject ASC "

请求ID的第一行的重要性是作为通用占位符,以便所有后续参数都可以以“AND”作为前缀。

如果变量为空,则不包含该变量,因此仅使用指定的变量。