国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQL語句技巧:查詢時巧用OR實現邏輯判斷

2024-07-21 02:48:28
字體:
來源:轉載
供稿:網友
SQL語句技巧:查詢時巧用OR實現邏輯判斷

首先看以下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=@fieldvalueENDELSE IF @fieldname = 'plateno'BEGIN    SELECT * FROM TABLENAME WHERE plateno=@fieldvalueENDELSE IF @fieldname = 'owner'BEGIN    SELECT * FROM TABLENAME WHERE [owner]=@fieldvalueENDELSE IF @fieldname = 'contacttelno'BEGIN    SELECT * FROM TABLENAME WHERE contacttelno=@fieldvalueENDELSEBEGIN    SELECT * FROM TABLENAMEEND

現在如果需要用一句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兩邊的條件只能滿足其中之一即可,不知道大家明白沒有,當然如果有更好的方法或不同的意見歡迎交流,共同進步!

更多IT相關的文章,歡迎光臨我的個人網站:http://www.zuowenjun.cn/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鸡西市| 麻栗坡县| 天台县| 九龙坡区| 喀喇沁旗| 团风县| 平谷区| 广东省| 乌拉特中旗| 泽库县| 辽宁省| 潢川县| 五华县| 天全县| 元朗区| 丰城市| 辽源市| 丰宁| 申扎县| 商河县| 邯郸市| 隆回县| 兰西县| 盐亭县| 育儿| 石棉县| 大厂| 精河县| 井研县| 卢氏县| 蒲江县| 姚安县| 建德市| 昌邑市| 濮阳市| 永嘉县| 文昌市| 通榆县| 双鸭山市| 财经| 绥棱县|