首页 > 解决方案 > SQL Server 存储过程:if vairable = X, case where 语句

问题描述

我能够制作这个并且它有效,但我不确定为什么或是否有更清洁的方法。

基本上我有一个将传递参数的 ASP.NET C# 服务器端。如果参数 = 0,我希望选择返回所有内容

如果选择不是零,我只想返回特定的行。

DECLARE @OrgId INT = 0 


;WITH cte AS
(
    SELECT
        o.ID_PK OrgId, ISNULL(o.Parent_ID_FK, 1) ParentId, 
        o.Organization_Name
    FROM
        DYN_Organization o
    WHERE
        o.Is_Active = 1
        AND @OrgId LIKE CASE @OrgId
                           WHEN '0' THEN '0'
                           ELSE o.ID_PK
                        END
)
SELECT * 
FROM cte  

这再次像我想要的那样工作,我只是不知道为什么。我以为我必须放%,但它不喜欢那样。当我意识到它有效时,我正在测试我的查询。

标签: sqlsql-serverselect

解决方案


您可以使用逻辑运算符来模拟这种行为or,或者更好的是,in它是一系列ored 相等检查的简写:

;WITH cte AS
(

    SELECCT o.ID_PK OrgId, ISNULL(o.Parent_ID_FK, 1) ParentId, o.Organization_Name
    FROM    DYN_Organization o
    WHERE   o.Is_Active = 1 AND
            @OrgId IN ('0', o.ID_PK)

)
SELECT * FROM cte  

推荐阅读