首先看以下sql邏輯語句塊:
declare現在如果需要用一句sql語句就要實現上述邏輯判斷並查詢結果,大家可能會想到採用如下拼接的方法實現:@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
endelse
if@fieldname='
plateno
'begin
select
*from tablename where plateno=
@fieldvalue
endelse
if@fieldname='
owner
'begin
select
*from tablename where
[owner]=
@fieldvalue
endelse
if@fieldname='
contacttelno
'begin
select
*from tablename where contacttelno=
@fieldvalue
endelse
begin
select
*from
tablename
end
declare雖然這樣看起來確實能實現邏輯判斷並查詢結果,但看起來不夠直觀,修改麻煩且容易出錯,而且有一定的侷限性,因為這裡@fieldname與表字段相同,拼接相對容易些,若不相同的情況下,那就無法實現了,所以我這裡採用了另一種方法,效率暫且不說,但絕對簡單易用而且夠靈活,請看如下sql語句:@sqltext
nvarchar(2000
)set
@sqltext='
select * from tablename where '+
@fieldname+'
='''
+@fieldvalue
+''''
execute (@sqltext)
select經驗證這條sql語句可以實現邏輯判斷並查詢結果,而且就算@fieldname與表字段不相同,我們也可以直接更換相應的字段即可,現在來簡要說明一下其原理:*from tablename a where1=
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
') )
and ((@fieldname = 'chassisno' and a.chassisno=@fieldvalue) or (@fieldname<>'chassisno') )
因為是and關聯,所以後面括號裡面的條件是必須滿足,又因為括號裡面採用了or關聯,所以括號裡面的兩邊的條件是可以符合乙個即可的,翻譯一下就是,若@fieldname = 'chassisno'時,則要求a.chassisno=@fieldvalue,否則只要@fieldname<>'chassisno'時,則忽略掉前前面的關聯條件。注意他們的特點是互斥的,也就是or兩邊的條件只能滿足其中之一即可,不知道大家明白沒有,當然如果有更好的方法或不同的意見歡迎交流,共同進步!
更多it相關的文章,歡迎光臨我的個人**:
1 許多表同時查詢時,sql語句書寫技巧
步驟 確定目標 確定要查詢的資料時那幾個字段。例如 要查 sname,sage,tname,cname.資料分析 這些資料分別在那幾張表中,並以其中乙個為基礎寫初始sql語句。例如 select sname,sage from student where address like 杭州 一步步新增其...
sql語句交集情況的查詢技巧
開發過程中涉及到了查詢字串交集的情況,不會寫這樣的sql,上網一搜,還真有例子。現在分享給大家。也許某一天你就會用到,交集表的字段就是 name no a 2,9 b 8,10 字串是str 0,1,2,3,4 接下來就是查 no欄位裡跟str裡有交集的記錄 查詢的結果就是name a的,no 2,...
編寫sql語句技巧
一 今天遇到乙個帥選資料的問題,sqlserver儲存過程中,加了乙個新的篩選資料的條件,不打亂原來的取資料的模式下把新的功能新增進去,用一段複合型的exists語句就可以解決問題 and 原先的sql 語句 過濾自助機不顯示的科室 專家資料 add by aorigel 20101020 andn...