Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server存储过程:如果VARABLE=X,则使用where语句_Sql_Sql Server_Select - Fatal编程技术网

SQL Server存储过程:如果VARABLE=X,则使用where语句

SQL Server存储过程:如果VARABLE=X,则使用where语句,sql,sql-server,select,Sql,Sql Server,Select,虽然我不知道为什么或者是否有更干净的方法,但我还是能够设计出这个,并且它能工作 基本上我有一个ASP.NET C#服务器端,它将传递一个参数。如果参数=0,我希望select返回所有内容 如果select不是零,我只想返回特定的行 DECLARE @OrgId INT = 0 ;WITH cte AS ( SELECT o.ID_PK OrgId, ISNULL(o.Parent_ID_FK, 1) ParentId, o.Organization

虽然我不知道为什么或者是否有更干净的方法,但我还是能够设计出这个,并且它能工作

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

如果select不是零,我只想返回特定的行

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  

同样,这是我想要的,我只是不知道为什么。我想我必须把
%
放进去,但它不喜欢这样。我正在测试我的查询,这时我意识到它起作用了。

你可以用逻辑
操作符来模拟这种行为,或者更好的是,用
中的
来模拟这种行为,这是一系列
相等检查的简写:

;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  

ID_PK是整数吗?我知道您正在转换为字符串以便可以使用like,但这很少是一件好事。本主题和不同/更好的方法将在中详细讨论。以这种方式使用LIKE是令人困惑的,因为它在逻辑上与EQUALS(=)运算符相同。通常,人们会将其视为“where o.ID_PK=_OrgId或_OrgId为null”(因为大多数使用null作为“all”选项,而不是特定的标志值)。