妙用"1=1"和"1<>1"

在多条件动态查询过程中我们常常得根据选择条件动态的生成SQL查询语句,假设我们得根据选择的班级和姓名信息动态的查询学生信息,下边提供了三种生成SQL查询语句的方法:

方法一:
user_name  = Request.Form("user_name") '姓名
user_class = Request.Form("user_class") '班级
sWhere   = ""
If user_name<>"" Then
    If sWhere = "" Then
        sWhere = " where user_name='" & user_name & "' "
    Else
        sWhere = sWhere & " and user_name='" & user_name & "' "
    End If
End If
If user_class<>"" Then
    If sWhere = "" Then
        sWhere = " where user_class=" & user_class & " "
    Else
        sWhere = sWhere & " and user_class=" & user_class & " "
    End If
End If
sSql = "select * from student" & sWhere 'SQL查询语句

方法二:
user_name  = Request.Form("user_name") '姓名
user_class = Request.Form("user_class") '班级
sWhere   = ""
If user_name<>"" Then
    If sWhere = "" Then
        sWhere = " user_name='" & user_name & "' "
    Else
        sWhere = sWhere & " and user_name='" & user_name & "' "
    End If
End If
If user_class<>"" Then
    If sWhere = "" Then
        sWhere = " user_class=" & user_class & " "
    Else
        sWhere = sWhere & " and user_class=" & user_class & " "
    End If
End If
sSql = "select * from student where" & sWhere 'SQL查询语句

方法三:
user_name  = Request.Form("user_name") '姓名
user_class = Request.Form("user_class") '班级
sWhere   = ""
If user_name<>"" Then sWhere = sWhere & " and user_name='" & user_name & "' "
If user_class<>"" Then sWhere = sWhere & " and user_class=" & user_class & " "
sSql = "select * from student where 1=1" & sWhere 'SQL查询语句

我们来比较下三种方法

方法一:不会出错,代码多;
方法二:在user_name和user_class都为空的情况下会出现"select * from student where"这样的错误的SQL查询语句,代码和方法一样多;
方法三:不会出错,代码最少;

显然方法三是最可选的方法,最令人叫绝的是它用了"1=1",既减少了代码,又避免了出现错误的SQL查询语句!

关于"1=1(永真)"和"1<>1(永假)"网上举的比较多的例子就是在拷贝表和复制表结构中使用,代码如下:

拷贝表:create table_name as select * from Source_table where 1=1;
复制表结构:create table_name as select * from Source_table where 1<>1;

评论: 0 | 引用: 0 | 查看次数: 3428
发表评论
登录后再发表评论!