sql - 在where子句中使用带有临时表的案例表达式?
问题描述
StatusId
是一个逗号分隔的字符串。如果StatusId
为“0”,则应获取所有行。否则我需要加入临时表#StatusIdVal
并且只应该获取相关记录。
CREATE Procedure TestSchema.GetDetails
(
@StatusId Varchar(MAX)
)
As
Begin
SET NOCOUNT ON
IF OBJECT_ID('tempdb.dbo.#TempStatusVal') IS NOT NULL
BEGIN
DROP TABLE #TempStatusVal
END
Create Table #TempStatusVal (StatusId Int Primary Key)
Insert into #TempStatusVal (StatusId)
SELECT Distinct ITEMS FROM TestSchema.SPLIT(@StatusId, ',')
Select *
From TestSchema.tblDetails TD with (NoLock)
Where TD.StatusId In (Select Case When @StatusId = '0' Then TD.StatusId Else (Select StatusId From #TempStatusVal) End)
IF OBJECT_ID('tempdb.dbo.#TempStatusVal') IS NOT NULL
BEGIN
DROP TABLE #TempStatusVal
END
SET NOCOUNT OFF
End
GO
我可以理解,如果#TempStatusVal
有多个记录返回异常
子查询返回超过 1 个值,这是不允许的
我怎样才能做到这一点?
解决方案
您可能需要这样的WHERE
条款
WHERE @StatusId = '0'
OR EXISTS (SELECT 1 FROM #TempStatusVal WHERE TD.StatusId = StatusId)
推荐阅读
- visual-studio - 如何在 VSTS(Visual Studio Team Services)中启用工作项对话框?
- python - 使用 INSERT INTO ....ON DUPLICATE KEY 更新表的 ETL 脚本
- javascript - 我可以在 Bootstrap 单选按钮组中取消选择的项目上捕获什么事件
- java - 带有 Everyone=READ 的 Windows 文件会拒绝访问
- c# - 将 JSON 反序列化为 C# 对象以在网格中将嵌套数组显示为字符串
- aframe - 如何使用 setAttribute 更改 A-Frame 中对象的位置?
- reactjs - 有没有办法使用 React-dnd 获取文件的内容?
- gensim - gensim word2vec - 更新模型数据
- google-search - 自定义 Google 搜索重定向到 https://cse.google.com/cse/all
- c - Ada 到 C:跨语言导入函数的参数值变化