国产探花免费观看_亚洲丰满少妇自慰呻吟_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/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 滦平县| 东兰县| 绥化市| 星子县| 海盐县| 高邮市| 临海市| 万州区| 天镇县| 岐山县| 图木舒克市| 兴城市| 南安市| 信丰县| 大余县| 白朗县| 汝南县| 红桥区| 滦平县| 义乌市| 慈利县| 峨山| 海阳市| 黔南| 屏东县| 青阳县| 巴塘县| 贺兰县| 板桥市| 黎城县| 怀来县| 平乡县| 哈密市| 泰宁县| 库尔勒市| 承德市| 香港 | 平昌县| 西丰县| 西宁市| 正定县|