編輯器加SQL多條件查詢存儲過程 2010-05-13 17:06:29| 分類: SQL | 標簽: |字號大中小 訂閱 . 例一、 ALTER proc SelectProduct @ProdID varchar(10), @ProdName nvarchar(30), @CategoryID varchar(5), @MinPrice decimal(10,2), @MaxPrice decimal(10,2) as declare @sql varchar(2000) set @sql='select * from Product where 1=1' if @ProdID<>'' set @sql=@sql+' and ProdID like ''%'+@ProdID+'%''' if @ProdName<>'' set @sql=@sql+' and ProdName like ''%'+@ProdName+'%''' if @CategoryID<>'ALL' set @sql=@sql+' and CategoryID='''+@CategoryID+'''' if @MinPrice<>-1 set @sql=@sql+' and Price>='+cast(@MinPrice as varchar) if @MaxPrice<>-1 set @sql=@sql+' and Price<='+cast(@MaxPrice as varchar) set @sql=@sql+' order by AddTime desc' --print @sql exec(@sql) 例二、 CREATE PROC KY_UsedCar_AdvancedSearch ( @pinpai varchar(35)=null, --1、品牌 @chexing varchar(30)=null, --2、車型 @nianfen varchar(20)=null, --3、車齡 @cheliangsuozaidi varchar(20)=null, --4、省份 @chengshi varchar(20)=null, --5、城市 @xingshigonglishu int=null, --6、行駛里程 @biansuxiang varchar(20)=null, --7、變速箱類型 @jiage int=null, --8、價格區間 @yanse varchar(10)=null --9、顏色 --10、關鍵字 ) AS declare @sqlStr varchar(500) ----品牌 if @pinpai <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and pinpai='+''''+@pinpai+'''' else set @sqlStr=' where pinpai='+''''+@pinpai+'''' end /*begin set @sqlStr=' where pinpai='+''''+@pinpai+'''' end*/ ----車型 if @chexing <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and chexing='+''''+@chexing+'''' else set @sqlStr=' where chexing='+''''+@chexing+'''' end ----車齡 if @nianfen <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and nianfen='+''''+@nianfen+'''' else set @sqlStr=' where nianfen='+''''+@nianfen+'''' end ----省份 if @cheliangsuozaidi <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and cheliangsuozaidi='+''''+@cheliangsuozaidi+'''' else set @sqlStr=' where cheliangsuozaidi='+''''+@cheliangsuozaidi+'''' end ----城市 if @chengshi <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and nianfen='+''''+@chengshi+'''' else set @sqlStr=' where nianfen='+''''+@chengshi+'''' end ----行駛里程 if @xingshigonglishu <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and xingshigonglishu='+''''+@xingshigonglishu+'''' else set @sqlStr=' where xingshigonglishu='+''''+@xingshigonglishu+'''' end ----變速箱類型 if @biansuxiang <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and biansuxiang='+''''+@biansuxiang+'''' else set @sqlStr=' where biansuxiang='+''''+@biansuxiang+'''' end ----區間價格 if @jiage <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and jiage='+''''+@jiage+'''' else set @sqlStr=' where jiage='+''''+@jiage+'''' end ----顏色 if @yanse <>'' begin if @sqlStr <>'' set @sqlStr=@sqlStr+' and yanse='+''''+@yanse+'''' else set @sqlStr=' where yanse='+''''+@yanse+'''' end EXEC('select * from Ky_U_UsedCarResource'+@sqlStr) GO 例三:http://topic.csdn.net/u/20090313/09/8e851d7b-00a6-4ce0-9797-fffe19845f43.html 我表結構如下: IF EXISTS (SELECT * FROM sysobjects WHERE [NAME]='Employees') DROP TABLE Employees /******************************************************************************** -- --Action:創建員工信息表(Employees) --Author:123 --Create-Date:2009-3-13 *********************************************************************************/ CREATE TABLE Employees ( [Id] int IDENTITY(1,1) CONSTRAINT PK_EE_Id PRIMARY KEY([Id]) not null, --員工信息主鍵列,自動標識主鍵列 E_no nvarchar(20) not null, --員工身份編號 E_name nvarchar(20) not null, --員工名稱 E_six varchar(10) not null, --員工性別 E_Did int CONSTRAINT FK_E_DId FOREIGN KEY(E_DId) REFERENCES Depts([Id]) not null, --員工部門編號,Depts表[Id]的編號 E_born Datetime not null, --員工出生年月 E_native nvarchar(100)null, --員工籍貫 E_address nvarchar(100) null, --員工現住地址 E_email nvarchar(20) null, --員工Email E_phone nvarchar(30) null, --聯系電話,多個電話“;”號隔開 E_telphone nvarchar(30) null, --聯系人移動電話,多個電話用“;”號隔開 E_qq nvarchar(15) null, --員工QQ E_datetime datetime not null, --員工入職日期 E_picpath nvarchar(30) null, --員工相片路徑 E_work nvarchar(30) null, --員工職位 E_login nvarchar(20) not null, --員工賬號 E_pwd nvarchar(20) not null, --員工密碼 E_Rid int CONSTRAINT FK_E_RId FOREIGN KEY(E_RId) REFERENCES Roles([Id])not null,--員工權限編號,Roles表[Id]的外鍵 E_remark nvarchar(200) null, --備注 ) 我要實現根據 E_no、E_name、E_Did、E_work、E_Rid 這5個條件來查詢, CREATE PROCEDURE employees_select_SQL_proc @name nvarchar(20), @did nvarchar(3), @work nvarchar(10), @rid nvarchar(3) AS DECLARE @sql nvarchar(1000) SET @sql='SELECT * FROM employees WHERE 1=1' IF(@name IS NOT NULL) BEGIN SET @sql=@sql+' AND E_name LIKE ''%'+@name+'%'' ' END IF(@did IS NOT NULL) BEGIN SET @sql=@sql+' AND E_Did ='+@did END IF(@work IS NOT NULL) BEGIN SET @sql=@sql+' AND E_work LIKE ''%'+@work+'%'' ' END IF(@rid IS NOT NULL) BEGIN SET @sql=@sql+' AND E_Rid ='+@rid END EXEC(@sql) GO 用 print(@sql) 看一下你最後的SQL語句是否正確. 當將非數字類型的 char、nchar、varchar 或 nvarchar 數據轉換為 int、float、numeric 或 decimal 時,SQL Server 將返回錯誤信息。” 具體位置可以用CONVERT關鍵字在叢書中搜 載中...
轉載于:https://www.cnblogs.com/rc727512646/archive/2012/07/03/2575461.html