【发布时间】:2016-09-12 06:34:25
【问题描述】:
我正在尝试创建一个从表employee 中搜索员工的存储过程。
我的查询看起来像这样
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
程序编译成功。但是当像
一样执行它时exec EmployeeList 1,10,'shaili','',null
它也显示其他记录。谁能解释一下?我只想要给定名称的记录。
我得到的结果:
【问题讨论】:
-
在 where close 中尝试仅按 FirstName 查找。
-
删除 "%" 。 proc 在这里为您提供所有包含“sh”的名称。
-
@Lasith 通过评论另外两行来做到这一点。我用名字 VIKAS 搜索,仍然显示所有三个结果。我是否缺少一些逻辑。
-
@Sami 如果我用 vikas 搜索会怎样。仍然显示相同的结果。
-
问题在于 or 子句 OR 只计算表达式,直到找到 TRUE 结果
标签: sql-server tsql stored-procedures