2010-05-01 9 views
0

Quelqu'un peut-il modifier cela, quand j'insère Emp. nommez-le à la première recherche et il ne vérifie pas d'autres paramètres que vous pourriez modifier ce sp pour la recherche exacte basée sur le paramètre.Champ de recherche basé sur plusieurs paramètres

--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

si j'entre emp Nom et date ne recherche pas spécifique Il va d'abord la recherche et vérifier le nom de emp n'est pas nul que je veux effectuer devrait être vérifier à la fois paramètre et recherche comme ceci select * from tbl où value = parameter et value = parameter2 –

+0

Veuillez écrire un DDL et quelques exemples de données. –

+0

pouvez-vous me dire votre ID email afin que je puisse envoyer des données de talbe et script pour que vous puissiez mettre en œuvre la recherche –

Répondre

0

Essayez quelque chose comme ceci:

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

Merci beaucoup .... son fonctionnement. –

0

Essayez ceci.

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

Merci pour votre aide .......... mais il ne donne pas de résultat approprié. Je pense qu'il devrait y avoir une certaine condition IF. Si je mets seulement la fonction de travail il donne toutes les données qui ne sont pas exigées. –

Questions connexes