SQL 语句到 return 如果没有找到行,多列的空值
SQL statement to return Null values for multiple columns if no rows found
我无法想出解决这个问题的方法。即,即使使用 WHERE 子句找不到该行,我也希望第二个 SELECT 语句为 return 空值。
我尝试了许多不同的解决方案,但没有任何效果(使用 IF、CTE 等)。你能帮忙吗?
SELECT RA.id
,AllEngagementsAndJobCodes =
(
SELECT
(
SELECT
(...)
For JSON Path
) AS engagements
,
(
SELECT [someColumn] as [id], [someColumn2] as [name]
FROM [someInterface].[someSchema].[someTable]
WHERE [someID] = '12345'
For JSON Path, INCLUDE_NULL_VALUES
) as jobCodes
For JSON Path, WITHOUT_ARRAY_WRAPPER
)
它的输出应该是一列(这对于这个问题来说是微不足道的)和包含 JSON 路径的第二列,它应该看起来像这样:
{
"engagements": [
{
//results of the first query, not siginificant for the question
}
],
"jobCodes": [
{
"id": null,
"name": null
}
]
}
请注意,如果查询执行 return 某些操作,它可能不止一行,所有这些都需要包含在输出中 JSON。
你可以使用这个技巧来解决你的问题
IF(NOT EXISTS (...))
BEGIN
SELECT 0 AS UserID
,N'' UserName
WHERE 1 = 2
RETURN;
END
一种方法是使用通用的 table 表达式和 union all
:
;WITH CTEInnerQuery AS
(
SELECT [someColumn] as [id], [someColumn2] as [name]
FROM [someInterface].[someSchema].[someTable]
WHERE [someID] = '12345'
), CTEInnerJson AS
(
SELECT *
FROM CTEInnerQuery
UNION ALL
SELECT NULL as [id], NULL as [name]
WHERE NOT EXISTS(SELECT 1 FROM CTEInnerQuery)
)
SELECT RA.id
,AllEngagementsAndJobCodes =
(
SELECT
(
SELECT
(...)
For JSON Path
) AS engagements
,
(
SELECT *
FROM CTEInnerJson
For JSON Path, INCLUDE_NULL_VALUES
) as jobCodes
For JSON Path, WITHOUT_ARRAY_WRAPPER
)
我无法想出解决这个问题的方法。即,即使使用 WHERE 子句找不到该行,我也希望第二个 SELECT 语句为 return 空值。
我尝试了许多不同的解决方案,但没有任何效果(使用 IF、CTE 等)。你能帮忙吗?
SELECT RA.id
,AllEngagementsAndJobCodes =
(
SELECT
(
SELECT
(...)
For JSON Path
) AS engagements
,
(
SELECT [someColumn] as [id], [someColumn2] as [name]
FROM [someInterface].[someSchema].[someTable]
WHERE [someID] = '12345'
For JSON Path, INCLUDE_NULL_VALUES
) as jobCodes
For JSON Path, WITHOUT_ARRAY_WRAPPER
)
它的输出应该是一列(这对于这个问题来说是微不足道的)和包含 JSON 路径的第二列,它应该看起来像这样:
{
"engagements": [
{
//results of the first query, not siginificant for the question
}
],
"jobCodes": [
{
"id": null,
"name": null
}
]
}
请注意,如果查询执行 return 某些操作,它可能不止一行,所有这些都需要包含在输出中 JSON。
你可以使用这个技巧来解决你的问题
IF(NOT EXISTS (...))
BEGIN
SELECT 0 AS UserID
,N'' UserName
WHERE 1 = 2
RETURN;
END
一种方法是使用通用的 table 表达式和 union all
:
;WITH CTEInnerQuery AS
(
SELECT [someColumn] as [id], [someColumn2] as [name]
FROM [someInterface].[someSchema].[someTable]
WHERE [someID] = '12345'
), CTEInnerJson AS
(
SELECT *
FROM CTEInnerQuery
UNION ALL
SELECT NULL as [id], NULL as [name]
WHERE NOT EXISTS(SELECT 1 FROM CTEInnerQuery)
)
SELECT RA.id
,AllEngagementsAndJobCodes =
(
SELECT
(
SELECT
(...)
For JSON Path
) AS engagements
,
(
SELECT *
FROM CTEInnerJson
For JSON Path, INCLUDE_NULL_VALUES
) as jobCodes
For JSON Path, WITHOUT_ARRAY_WRAPPER
)