我正在尝试从需要满足以下要求的表中选择 3 列(在 UPDATE 部分)
SELECT A.ACTIVITY_CD, A.REASON_CD, A.REASON_DESC
INTO #TmpViewResult
FROM CFG_REASON A, #TmpViewParam B
WHERE A.ACTIVITY_CD = CASE WHEN B.ActivityCd = '' THEN A.ACTIVITY_CD ELSE B.ActivityCd END
AND A.REASON_CD = CASE WHEN B.ReasonCd = '' THEN A.REASON_CD ELSE B.ReasonCd END
它正在为我返回空记录。我在这里做错了什么,我应该如何改变它?
更新:
下面的答案对我不起作用。它仍然给我空记录。我在上面的查询之前有这个代码。
SELECT ActivityCd, ReasonCd
INTO #TmpViewParam
FROM OPENJSON(@Param)
WITH (ActivityCd NVARCHAR(10),
ReasonCd NVARCHAR(10))
下面是传递的参数,两个参数都可以为空或包含值。
@Param = N'{"ACTIVITY_CD": "RS00001", "REASON_CD": ""}'
活动CD
原因CD
上面@Param 的预期结果: {"ACTIVITY_CD": "RS00001", "REASON_CD": "xxx", "REASON_DESC": "xxx"} 其余的记录根据参数
答案 0 :(得分:0)
我认为你想要:
SELECT r.ACTIVITY_CD, r.REASON_CD, r.REASON_DESC
INTO #TmpViewResult
FROM CFG_REASON r CROSS JOIN
#TmpViewParam p
WHERE (r.ACTIVITY_CD = p.ActivityCd OR p.ActivityCd = '') AND
(r.REASON_CD = p.ActivityCd OR p.REASON_CD = '') ;
这使用参数表作为每列的过滤器,如果值存在的话。注意:NULL
通常用于表示“不使用参数”而不是 ''
。