加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL逻辑语句块怎样编辑,如何做逻辑判断并查询结果

发布时间:2023-05-20 14:25:39 所属栏目:MsSql教程 来源:
导读:这篇文章主要介绍了“SQL逻辑语句块怎样写,如何做逻辑判断并查询结果”相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL逻辑语句块怎样写,如何做逻辑判断并查询结果文章
这篇文章主要介绍了“SQL逻辑语句块怎样写,如何做逻辑判断并查询结果”相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL逻辑语句块怎样写,如何做逻辑判断并查询结果文章都会有所收获,下面我们一起来看看吧。
 
首先看以下SQL逻辑语句块:
 
DECLARE @fieldname    varchar(50)
 
DECLARE @fieldvalue nvarchar(100)
 
SET @fieldname='chassisno' --这里可传入chassisno,plateno,owner,contacttelno其中之一或不传
 
SET @fieldvalue='Zuowenjun'
 
IF @fieldname = 'chassisno'
 
BEGIN
 
    SELECT * FROM TABLENAME WHERE chassisno=@fieldvalue
 
END
 
ELSE IF @fieldname = 'plateno'
 
BEGIN
 
    SELECT * FROM TABLENAME WHERE plateno=@fieldvalue
 
END
 
ELSE IF @fieldname = 'owner'
 
BEGIN
 
    SELECT * FROM TABLENAME WHERE [owner]=@fieldvalue
 
END
 
ELSE IF @fieldname = 'contacttelno'
 
BEGIN
 
    SELECT * FROM TABLENAME WHERE contacttelno=@fieldvalue
 
END
 
ELSE
 
BEGIN
 
    SELECT * FROM TABLENAME
 
END
 
现在如果需要用一句SQL语句就要实现上述逻辑判断并查询结果,大家可能会想到采用如下拼接的方法实现:
 
DECLARE @sqltext NVARCHAR(2000)
 
SET @sqltext='SELECT * FROM TABLENAME WHERE ' + @fieldname + '=''' + @fieldvalue +''''
 
EXECUTE (@sqltext)
 
虽然这样看起来确实能实现逻辑判断并查询结果,但看起来不够直观,修改麻烦且容易出错,而且有一定的局限性,因为这里@fieldname与表字段相同,拼接相对容易些,若不相同的情况下,那就无法实现了,所以我这里采用了另一种方法,效率暂且不说,但绝对简单易用而且够灵活,请看如下SQL语句:
 
SELECT * FROM TABLENAME a WHERE 1=1 --(如果需要其它条件则用其它条件,否则可以这样或不要,如果不要则下面的第一个AND需去掉)
 
AND ((@fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@fieldname<>'chassisno') )
 
AND ((@fieldname = 'plateno' AND a.plateno=@fieldvalue) OR (@fieldname<>'plateno') )
 
AND ((@fieldname = 'owner' AND a.[owner]=@fieldvalue) OR (@fieldname<>'owner') )
 
AND ((@fieldname = 'contacttelno' AND b.contacttelno=@fieldvalue) OR (@fieldname<>'contacttelno') )
 
经验证这条SQL语句可以实现逻辑判断并查询结果,而且就算@fieldname与表字段不相同,我们也可以直接更换相应的字段即可,现在来简要说明一下其原理:
 
AND ((@fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@fieldname<>'chassisno') )
 
因为是AND关联,所以后面括号里面的条件是必须满足,又因为括号里面采用了OR关联,所以括号里面的两边的条件是可以符合一个即可的,翻译一下就是,若@fieldname = 'chassisno'时,则要求a.chassisno=@fieldvalue,否则只要@fieldname<>'chassisno'时,则忽略掉前前面的关联条件。注意他们的特点是互斥的,也就是OR两边的条件只能满足其中之一即可,不知道大家明白没有,当然如果有更好的方法或不同的意见欢迎交流,共同进步!
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章