sql - 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
这再次像我想要的那样工作,我只是不知道为什么。我以为我必须放%
,但它不喜欢那样。当我意识到它有效时,我正在测试我的查询。
解决方案
您可以使用逻辑运算符来模拟这种行为or
,或者更好的是,in
它是一系列or
ed 相等检查的简写:
;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
推荐阅读
- consensus - 在消息日志中找不到用于构建密封的 2f 提交消息
- statechart - 我如何对来自 Yakindu 的主状态图的事件做出反应?
- csv - AWK - 为基于多列(复合键)的重复数据处理大型 CSV(130 亿行)导致内存不足错误
- mysql - 长时间任务后,ActiveRecord 在简单更新期间抛出 Mysql2::Error::ConnectionError
- java - PKIX 路径构建失败:导入证书后
- python - 当你用 Cython 编译一个独立的可执行文件时,你可以使用其他 python 模块,如 pandas 和 numpy 吗?
- angular - 使用 Angular HttpClient 从 Rest 请求中获取“真实对象”(字段和方法)
- python - 发送到断开连接的套接字第一次成功
- go - 如何实时收集 Terraform 计划命令输出以显示在前端?
- javascript - 如何在 tinyMCE Javascript 上处理 404 图像 url