我有以下TSQL,3个ID(@EmpID,@DeptID和@CityID)被传入,它可以全部为NULL或任何一个可以为NULL。请参见下面的场景:TSQL - 使之更好
-- Very Narrow (all IDs are passed in)
IF(@EmpID IS NOT NULL AND @DeptID IS NOT NULL AND @CityID IS NOT NULL)
BEGIN
SELECT
e.EmpName
,d.DeptName
,c.CityName
FROM
Employee e WITH (NOLOCK)
JOIN Department d WITH (NOLOCK) ON e.deptid = d.deptid
JOIN City c WITH (NOLOCK) ON e.CityID = c.CityID
WHERE
e.EmpID = @EmpID
END
-- Just 2 IDs passed in
ELSE IF(@DeptID IS NOT NULL AND @CityID IS NOT NULL)
BEGIN
SELECT
e.EmpName
,d.DeptName
,NULL AS [CityName]
FROM
Employee e WITH (NOLOCK)
JOIN Department d WITH (NOLOCK) ON e.deptid = d.deptid
JOIN City c WITH (NOLOCK) ON e.CityID = c.CityID
WHERE
d.deptID = @DeptID
END
-- Very Broad (just 1 ID passed in)
ELSE IF(@CityID IS NOT NULL)
BEGIN
SELECT
e.EmpName
,NULL AS [DeptName]
,NULL AS [CityName]
FROM
Employee e WITH (NOLOCK)
JOIN Department d WITH (NOLOCK) ON e.deptid = d.deptid
JOIN City c WITH (NOLOCK) ON e.CityID = c.CityID
WHERE
c.CityID = @CityID
END
-- None (Nothing passed in)
ELSE
BEGIN
SELECT
NULL AS [EmpName]
,NULL AS [DeptName]
,NULL AS [CityName]
END
问:有没有更好的办法(OR我具体什么都可以做,而不IF ... ELSE条件