在具有单个参数的存储过程中,我在本质上类似于以下查询:
SELECT
ID,
DepartmentID,
FileName
FROM
Document
-- conditional join from here
JOIN
AllowedDepartmentList ON DepartmentID = AllowedDepartmentList.ID
AND @IsAdmin = 'false'
参数是
@IsAdmin
,数据类型为bit。我使用的两个表是
Document
表(请参见上面查询中的结构),以及包含单个AllowedDepartmentList
列的int
。我使用此查询通过join过滤
Document
表的返回结果。我不使用WHERE DepartmentID IN()
子句,因为AllowedDepartmentList可以长达600-700个项目(对于IN()
来说,它在潜在的1M记录表中无法以良好的性能进行处理)因此,我使用联接进行过滤,但是只有在@IsAdmin参数为
false
时,过滤才应执行。就像从这里开始的条件连接后面的行一样,甚至都没有。我尝试了上面的查询,但没有任何记录。我怀疑我使用了错误的联接类型,但是我被卡住了。
最佳答案
您可以将左联接与需要管理员权限或联接匹配的组合使用
SELECT
ID,
DepartmentID,
FileName
FROM
Document
-- conditional join from here
LEFT JOIN
AllowedDepartmentList ON DepartmentID = AllowedDepartmentList.ID
WHERE
@IsAdmin = 'true' OR AllowedDepartmentList.ID IS NOT NULL