我需要编写一个 SQL 查询来检索基于提供的记录RoleId
。
例如
对于其他 RoleId,我希望表中的所有记录在CreatedBy
列上没有任何条件。
我正在根据我的要求提供示例查询。
SELECT _t1.*
FROM [dbo].[TblPassDetail] _t1 WITH (NOLOCK)
INNER JOIN [dbo].[TblVisitor] _t2 WITH (NOLOCK) ON _t1.VisitorId = _t2.SrNo
WHERE _t1.LocationId = @LocationId
AND _t1.CreatedBy = (CASE WHEN @RoleId = 1 THEN @LoginUserId ELSE 0 END)
问题是,如果提供的@RoleId
是 1,我将获得所有记录LoginUserId
,但如果@RoleId
不是 1,那么我不会获得任何记录作为 SQL 检查_t1.CreatedBy = 0
表中不存在的记录。
关于如何重写我的查询的任何建议?
您可以将WHERE
条款的困难部分改写为:
@RoleId = 1 AND _t1.CreatedBy = @LoginUserId
OR
@RoleId <> 1
换句话说,如果RoleId
是1
,则登录用户必须是创建者。但是对于其他RoleId
值,对登录用户没有这种依赖性。这是完整的查询:
SELECT _t1.*
FROM [dbo].[TblPassDetail] _t1 WITH (NOLOCK)
INNER JOIN [dbo].[TblVisitor] _t2 WITH (NOLOCK)
ON _t1.VisitorId = _t2.SrNo
WHERE
_t1.LocationId = @LocationId AND
(
(@RoleId = 1 AND _t1.CreatedBy = @LoginUserId) OR
@RoleId <> 1
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句