2016-09-12 3 views
2

Ich versuche eine gespeicherte Prozedur zu erstellen, die Mitarbeiter von der Tabelle Mitarbeiter sucht.SQL-Suchabfrage zeigt kein korrektes Ergebnis an

Meine Abfrage sieht wie folgt aus

ALTER PROCEDURE [dbo].[EmployeeList] 
    @CurrentPageNo INT = null, 
    @PageSize INT = 5, 
    @FirstName VARCHAR(100), 
    @Email VARCHAR(100), 
    @DeptId int = null 
AS 
BEGIN 
    DECLARE @StartRecordNo INT, @EndRecordNo INT 

    IF @CurrentPageNo IS NULL 
     SET @CurrentPageNo = 1 

    SET @StartRecordNo = ((@CurrentPageNo - 1) * @PageSize) 
    SET @EndRecordNo = @StartRecordNo + @PageSize 

    SELECT 
     ROW_NUMBER() OVER (ORDER BY CreatedByDate desc) As srno, 
     EmployeeID, FirstName, LastName, Email, DateOfBirth, Joining, 
     MobileNumber, MonthsOfExperience, TotalExperience, DepartmentName 
    FROM 
     Employee 
    INNER JOIN 
     Department ON Employee.DeptId = Department.DepartmentID 
    WHERE 
     (ISNULL(@FirstName, '') = '' OR Employee.FirstName LIKE '%' + FirstName + '%') 
     AND 
     (ISNULL(@Email, '') = '' OR Employee.Email LIKE '%' + @Email + '%') 
     AND 
     (@DeptId IS NULL OR Employee.DeptId = @DeptId) 
END 

Das Verfahren erfolgreich kompiliert wird. aber wenn Sie es wie

exec EmployeeList 1,10,'shaili','',null 

ausführen, zeigt es andere Aufzeichnungen auch an. Kann das jemand erklären? Ich möchte nur den Datensatz mit dem angegebenen Namen.

Ergebnis bekam ich:

Executed query

+0

In der Nähe, wo gerade erst von First zu finden versuchen. – Lasith

+0

Entfernen Sie "%". Der Proc gibt dir alle Namen, die hier 'sh' enthalten. – Sami

+0

@Lasith Hat das gemacht, indem sie zwei andere Zeilen kommentiert hat. Ich suchte mit dem Namen VIKAS und zeigt immer noch alle drei Ergebnisse. Fehle ich etwas Logik? –

Antwort

2
#Siddhant only little mistake by you. i.e you pass FirstName instead of @FirstName. check below code. 

ALTER PROCEDURE [dbo].[Test_EmployeeList] 
     @CurrentPageNo INT = null, 
     @PageSize INT=5, 
     @FirstName VARCHAR(100), 
     @Email VARCHAR(100), 
     @DeptId int = null 

    AS 
    BEGIN 
    DECLARE @StartRecordNo INT,@EndRecordNo INT 

    IF @CurrentPageNo IS NULL 
     SET @CurrentPageNo=1 

    SET @StartRecordNo=((@CurrentPageNo-1) * @PageSize) 
    SET @[email protected] + @PageSize 
    SELECT ROW_NUMBER()OVER(ORDER BY Reg_Date desc) As srno, 
    F_Name, L_Name, Email, Mobile, Reg_Date from tbl_LoginMaster 
    inner join tbl_Login_Detail 
    ON tbl_LoginMaster.User_Id = tbl_Login_Detail.User_Id 


    WHERE (ISNULL(@FirstName,'')='' OR tbl_LoginMaster.F_Name LIKE '%'[email protected]+'%') AND 
     (ISNULL(@Email,'')='' OR tbl_LoginMaster.Email LIKE '%'[email protected]+'%') AND 
     (@DeptId is null OR tbl_LoginMaster.User_Id = @DeptId) 
    END 
    GO 


    exec Test_EmployeeList 1,10,'Mohit','',null 
+0

Ja Das hat das Problem gelöst. Vielen Dank :) –

+0

Ihr Willkommen lieber. –

Verwandte Themen