SQL Server存储过程:如果VARABLE=X,则使用where语句
虽然我不知道为什么或者是否有更干净的方法,但我还是能够设计出这个,并且它能工作 基本上我有一个ASP.NET C#服务器端,它将传递一个参数。如果参数=0,我希望select返回所有内容 如果select不是零,我只想返回特定的行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
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”选项,而不是特定的标志值)。