[删除了公司机密信息或图形]
概念
在Org_Structure中有部门和办公室的独特组合。在Emp_Positions表中,每个员工都被分配到组织结构中的部门/办公室或“链”的特定组合。但是有些员工不应该属于办公室,所以他们被分配到office_id 列为NULL 的链中。
错误
提供的存储过程只能找到那些 dep_id 和 office_id 都不是 NULL 的链的员工。如果某些记录中office_id 为NULL,或者dep_id 为NULL,则不会显示该记录。看第二张图片,红色的记录永远不会显示在结果中。一旦我用一个值替换 NULL,它就会显示出来。如果我用 NULL 替换任何行的任何列,则不会显示整行。
这是存储过程:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE FilterEmpList
@empName nvarchar(250) = null,
@empDepID int = null,
@empOfficeID int = null,
@empPosID int = null
AS
BEGIN
SELECT
E.emp_id,
E.emp_name,
P.pos_name,
D.dep_name,
O.office_name
FROM dbo.Org_Structure OS
JOIN dbo.Emp_Positions EP ON OS.chain_id=EP.chain_id
JOIN dbo.Employees E ON EP.emp_id=E.emp_id
JOIN dbo.Positions P ON P.pos_id=EP.pos_id
JOIN dbo.Departments D ON D.dep_id=OS.dep_id
LEFT JOIN dbo.Offices O ON O.office_id=OS.office_id
WHERE (E.emp_name LIKE '%'+@empName+'%' OR @empName IS NULL)
AND OS.dep_id = ISNULL(@empDepID, OS.dep_id)
AND OS.office_id = ISNULL(@empOfficeID, OS.office_id)
AND EP.pos_id = ISNULL(@empPosID, EP.pos_id)
END
*添加了LEFT JOIN它仍然不起作用