2010-05-01 27 views
0

當我插入Emp時,任何人都可以修改它。將它命名爲第一次搜索,並且它不檢查其他參數,您是否可以修改此sp以便根據參數進行精確搜索。基於多個參數的搜索字段

--select * from Training_TRNS 
--USP_SearchEmployee '','2008-04-18 00:00:00.000','','','','','' 
alter Procedure USP_SearchEmployee 
@EmpName varchar(100)=null, 
@DateFrom varchar(100)=null, 
@DateTo varchar(100)=null, 
@CourseName varchar(100)=null, 
@JobFunction varchar(100)=null, 
@Region varchar(100)=null, 
@Status varchar(100)=null 
AS 

BEGIN 
if (@EmpName!='' and @EmpName is not null) 
    BEGIN 
     select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS where EmpName like '%'[email protected]+'%' 
    END 
ELSE IF (@CourseName!='' and @CourseName is not null) 
    BEGIN 
     select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS where SpeCourse_ID like '%'[email protected]+'%' 
    END 

ELSE IF (@JobFunction!='' and @JobFunction is not null) 
    BEGIN 
     select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS where EmpJobFunction like '%'[email protected]+'%' 
    END 

ELSE IF (@Region!='' and @Region is not null) 
    BEGIN 
     select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS where EmpRegion like '%'[email protected]+'%' 
    END 

ELSE IF (@Status!='' and @Status is not null) 
    BEGIN 
     select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS where Status like '%'[email protected]+'%' 
    END 

ELSE IF (@DateFrom!='' and @DateFrom is not null) 
    BEGIN 
     select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS where convert(varchar,DueDate,101) like '%'+convert(varchar,@DateFrom,101)+'%' 
    END 


Else 
    BEGIN 
     select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS 
    END 

END 
+0

如果我進入EMP名稱和日期不會搜索特定它去第一搜索和檢查EMP名不爲空,我想執行應當同時檢查參數和搜索 select * from tbl where value = parameter and value = parameter2 – 2010-05-01 08:17:45

+0

請發佈一些DDL和一些示例數據。 – 2010-05-01 08:37:36

+0

你能告訴我你的電子郵件ID,所以我可以發送talbe數據和腳本,所以你可以實現搜索 – 2010-05-01 08:51:37

回答

0

與這樣的嘗試:

DECLARE @sql nvarchar(MAX) -- this would work only is this is SQL2005/2008, else nvarchar(4000) 

SET @sql='select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS where 1=1 ' 

IF (@EmpName!='' and @EmpName is not null) 
    SET @[email protected] + ' AND EmpName like ''%'+ @EmpName+ '%''' 

IF (@CourseName!='' and @CourseName is not null) 
    SET @[email protected] + ' AND CourseName like ''%'+ @CourseName+ '%''' 

IF (@JobFunction!='' and @JobFunction is not null) 
     SET @[email protected] + ' AND EmpJobFunction like ''%'+ @JobFunction + '%''' 

IF (@Region!='' and @Region is not null) 
    SET @[email protected] + ' AND EmpRegion like ''%'+ @Region+ '%''' 

IF (@Status!='' and @Status is not null) 
    SET @[email protected] + ' AND Status like ''%'+ @Status+ '%''' 

IF (@DateFrom!='' and @DateFrom is not null) 
    SET @[email protected] + ' AND convert(varchar,DueDate,101) like ''%'+convert(varchar,@DateFrom,101)+ '%''' 

EXEC sp_executesql @sql 
+0

非常感謝....它的工作。 – 2010-05-03 06:15:41

0

試試這個。

alter Procedure USP_SearchEmployee 
@EmpName varchar(100)=null, 
@DateFrom varchar(100)=null, 
@DateTo varchar(100)=null, 
@CourseName varchar(100)=null, 
@JobFunction varchar(100)=null, 
@Region varchar(100)=null, 
@Status varchar(100)=null 
AS 

BEGIN 
     select EmpName,convert(varchar,DueDate,101) as DueDate,SpeCourse_ID as CourseName, 
     EmpJobFunction as JOBFunction,EmpRegion as Region,Status 
     from Training_TRNS 
     where 
       EmpName = isnull(ltrim(rtrim(@EmpName)), EmpName) or EmpName like '%'[email protected]+'%' 
     and  SpeCourse_ID = isnull(ltrim(rtrim(@CourseName)), SpeCourse_ID) or SpeCourse_ID like '%'[email protected]+'%' 
     and  EmpJobFunction = isnull(ltrim(rtrim(@JobFunction)), EmpJobFunction) or EmpJobFunction like '%'[email protected]+'%' 
     and  EmpRegion = isnull(ltrim(rtrim(@Region)), EmpRegion) or EmpRegion like '%'[email protected]+'%' 
     and  status = isnull(ltrim(rtrim(@status)), status) or status like '%'[email protected]+'%' 
     and  DueDate = isnull(@DateFrom, DueDate) or convert(varchar,DueDate,101) like '%'+convert(varchar,@DateFrom,101)+'%' 

END 
+0

感謝您的幫助..........但它沒有給出正確的結果。 我認爲應該有一些IF條件。 如果我只放置工作功能,它會提供所有不需要的數據。 – 2010-05-01 08:24:53