SqlServer 巧妙解決多條件組合查詢
更新時間:2012年11月05日 16:07:00 作者:
開發(fā)中經(jīng)常會遇得到需要多種條件組合查詢的情況,比如有三個表,年級表Grade(GradeId,GradeName),班級Class(ClassId,ClassName,GradeId),學員表Student(StuId,StuName,ClassId),現(xiàn)要求可以按年級Id、班級Id、學生名,這三個條件可以任意組合查詢學員信息
開發(fā)中經(jīng)常會遇得到需要多種條件組合查詢的情況,比如有三個表,年級表Grade(GradeId,GradeName),班級Class(ClassId,ClassName,GradeId),學員表Student(StuId,StuName,ClassId),現(xiàn)要求可以按年級Id、班級Id、學生名,這三個條件可以任意組合查詢學員信息。
做法不止一種,這里提供一種巧妙的使用一條查詢來實現(xiàn)的辦法,我們來寫成一個過程,如下:
create proc up_select_student_combocondition
@gradeId int,
@classId int,
@stuName nvarchar(10)
as
select s.*,c.classname,g.gradename from student s join class c on s.classid=c.classid join grade g on c.gradeid=g.gradeid
where
(@gradeId=-1 or g.gradeid=@gradeId) and
(@classId=-1 or c.classid=@classId) and
(@stuName='' or s.stuName=@stuName)
go
--那么:
exec up_select_student_combocondition -1,-1,'' --這是查詢所有學員信息
exec up_select_student_combocondition 2,-1,'' --這是查詢年級Id為2的學員信息
exec up_select_student_combocondition -1,4,'' --這是查詢班級Id為4的學員信息
exec up_select_student_combocondition 2,4,'' --這是查詢年級Id為2且班級Id為4的學員信息
--etc....
做法不止一種,這里提供一種巧妙的使用一條查詢來實現(xiàn)的辦法,我們來寫成一個過程,如下:
復制代碼 代碼如下:
create proc up_select_student_combocondition
@gradeId int,
@classId int,
@stuName nvarchar(10)
as
select s.*,c.classname,g.gradename from student s join class c on s.classid=c.classid join grade g on c.gradeid=g.gradeid
where
(@gradeId=-1 or g.gradeid=@gradeId) and
(@classId=-1 or c.classid=@classId) and
(@stuName='' or s.stuName=@stuName)
go
--那么:
exec up_select_student_combocondition -1,-1,'' --這是查詢所有學員信息
exec up_select_student_combocondition 2,-1,'' --這是查詢年級Id為2的學員信息
exec up_select_student_combocondition -1,4,'' --這是查詢班級Id為4的學員信息
exec up_select_student_combocondition 2,4,'' --這是查詢年級Id為2且班級Id為4的學員信息
--etc....
您可能感興趣的文章:
- SQLServer只賦予創(chuàng)建表權(quán)限的全過程
- 一文教會你在sqlserver中創(chuàng)建表
- 淺析SQL Server授予了CREATE TABLE權(quán)限但是無法創(chuàng)建表
- sql server 2000中禁止創(chuàng)建表(權(quán)限設置方法)
- SQL Server 2008 阻止保存要求重新創(chuàng)建表的更改問題的設置方法
- SqlServer使用 case when 解決多條件模糊查詢問題
- sqlserver和oracle中對datetime進行條件查詢的一點區(qū)別小結(jié)
- SQL?Server數(shù)據(jù)庫創(chuàng)建表及其約束條件的操作方法
相關(guān)文章
做購物車系統(tǒng)時利用到得幾個sqlserver 存儲過程
最近使用asp.net+sql2000開始開發(fā)一個小型商城系統(tǒng),其中涉及到得購物車功能主要是仿照淘寶實現(xiàn)的.2009-12-12
除MSSQL數(shù)據(jù)庫text字段中惡意腳本的刪方法
刪除MSSQL數(shù)據(jù)庫text字段的替換處理示例--全表替換,看到有人提問,所以整理了一個好久以前的處理方法,以供大家參考2009-07-07
SQL Server存儲過程中使用表值作為輸入?yún)?shù)示例
這篇文章主要介紹了SQL Server存儲過程中使用表值作為輸入?yún)?shù)示例,使用表值參數(shù),可以不必創(chuàng)建臨時表或許多參數(shù),即可向 Transact-SQL 語句或例程(如存儲過程或函數(shù))發(fā)送多行數(shù)據(jù),這樣可以省去很多自定義的代碼,需要的朋友可以參考下2015-07-07
SQL Server中將查詢結(jié)果轉(zhuǎn)換為Json格式腳本分享
這篇文章主要介紹了SQL Server中將查詢結(jié)果轉(zhuǎn)換為Json格式腳本分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-02-02
SqlServer數(shù)據(jù)庫腳本執(zhí)行命令行指令方式
這篇文章主要介紹了SqlServer數(shù)據(jù)庫腳本執(zhí)行命令行指令方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
SQL Server誤區(qū)30日談 第6天 有關(guān)NULL位圖的三個誤區(qū)
NULL位圖是為了確定行中的哪一列是NULL值,哪一列不是。這樣做的目的是當Select語句后包含存在NULL值的列時,避免了存儲引擎去讀所有的行來查看是否是NULL,從而提升了性能2013-01-01
SQL server高并發(fā)生成唯一訂單號的方法實現(xiàn)
這篇文章主要介紹了SQL server高并發(fā)生成唯一訂單號的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02

