Where 子句中的 SQL Server 条件语句

网状AP

我需要编写一个 SQL 查询来检索基于提供的记录RoleId

例如

  • 如果 RoleId = 1 THEN _t1.CreatedBy = @LoginUserId。

对于其他 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

换句话说,如果RoleId1,则登录用户必须是创建者。但是对于其他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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server:WHERE子句中具有IN条件的CASE语句

来自分类Dev

SQL Server:WHERE子句中的IF条件

来自分类Dev

where子句中的SQL Server条件

来自分类Dev

选择where子句中的SQL Server CASE语句

来自分类Dev

在 SQL Server 的 WHERE 子句中使用 CASE 语句

来自分类Dev

SQL Server:根据where子句中的条件使用AND或OR

来自分类Dev

SQL子句中的条件WHERE

来自分类Dev

SQL:if条件在where子句中

来自分类Dev

WHERE子句中具有多个条件的SQL语句的语法

来自分类Dev

具有2个条件的SQL语句中的WHERE子句

来自分类Dev

WHERE子句中具有多个条件的SQL语句的语法

来自分类Dev

SQL语句where子句中的case语句

来自分类Dev

WHERE子句中的SQL Server浮点

来自分类Dev

where 子句中的 SQL Server 时区

来自分类Dev

如何从SQL的where子句中删除语句

来自分类Dev

WHERE子句中嵌套SQL语句的结果

来自分类Dev

SQL查询的WHERE子句中的CASE语句

来自分类Dev

SQL:WHERE子句中的IF / CASE语句

来自分类Dev

SQL的where子句中的select语句

来自分类Dev

WHERE子句中嵌套SQL语句的结果

来自分类Dev

Android SQL语句中的多个Where子句

来自分类Dev

SQL select语句在where子句中

来自分类Dev

SQL在where子句中优化条件

来自分类Dev

SQL在where子句中优化条件

来自分类Dev

嵌入在In子句中的SQL Server case语句

来自分类Dev

SQL where子句中大于或小于case语句的子句

来自分类Dev

SQL Server:在Where子句中使用Case语句会产生错误

来自分类Dev

如何在SQL Server中的数据透视表语句中编写where子句

来自分类Dev

为什么在MS SQL Server的Where子句中使用CASE语句