如何将输出设置为 EMPTY,当前显示 ROW
How to set output to be EMPTY, currently shows a ROW
这里有一个 FonzSummary 可以帮助理解问题 -- 正确:http://imgur.com/5eLJCgv, Incorrect: http://imgur.com/a0Ssp0e
问题:
我在显示空输出时遇到了一些问题...我 想要 如果没有结果,输出绝对不会反映任何内容,但到目前为止我一直没有成功。
SET @AddedOutput =
CASE WHEN @AddedList IS NULL THEN NULL
ELSE 'Kids added to Santas Naughty List'+@AddedNames
END
SET @RemovedOutput =
CASE WHEN @RemovedList IS NULL THEN NULL
ELSE 'Kids removed from Santas Naughty List'+@RemovedNames
END
--Final Output
SELECT CASE
WHEN @AddedOutput IS NULL THEN (SELECT TOP 0 NULL)
ELSE @AddedOutPut END as 'List Changes'
UNION
SELECT CASE
WHEN @RemovedOutput IS NULL THEN (SELECT TOP 0 NULL)
ELSE @RemovedOutput END as 'List Changes'
更复杂的是,一旦我将 (Select TOP 0 NULL) 添加到我的过程中,有效结果就不再起作用了!为什么这会让它尝试转换为 Int?我知道结果不会是 Int!
Msg 245, Level 16, State 1, Procedure SantaList_TEST, Line 72
Conversion failed when converting the varchar value 'Kids added
to Santas Naughty List 27065, 28538, 28539' to data type int.
您有两个子查询,每个子查询 return 占一行。输出将有一行或两行。一种方法是:
SELECT t.*
FROM (SELECT @AddedOutPut as ListChanges
UNION
SELECT @RemovedOutput as ListChange
) t
WHERE ListChanges IS NOT NULL;
您的 CASE
语句中的 THEN (SELECT TOP 0 NULL)
是一次尝试不获取任何行的勇敢尝试。但是,FROM
子句(连同 WHERE
、GROUP BY
、HAVING
和 FETCH
/TOP
子句)真正决定了哪些行是正在 returned。 (SELECT TOP 0 NULL)
被用作标量子查询。如果它没有 return 任何东西,那么 SQL 会输入 NULL
,因此您的查询会得到彻底的简化。
此外,我怀疑在这种情况下是否真的需要 UNION
。删除重复项会产生开销。作为习惯,最好学会使用UNION ALL
,除非你真的想承担开销。
这里有一个 FonzSummary 可以帮助理解问题 -- 正确:http://imgur.com/5eLJCgv, Incorrect: http://imgur.com/a0Ssp0e
问题: 我在显示空输出时遇到了一些问题...我 想要 如果没有结果,输出绝对不会反映任何内容,但到目前为止我一直没有成功。
SET @AddedOutput =
CASE WHEN @AddedList IS NULL THEN NULL
ELSE 'Kids added to Santas Naughty List'+@AddedNames
END
SET @RemovedOutput =
CASE WHEN @RemovedList IS NULL THEN NULL
ELSE 'Kids removed from Santas Naughty List'+@RemovedNames
END
--Final Output
SELECT CASE
WHEN @AddedOutput IS NULL THEN (SELECT TOP 0 NULL)
ELSE @AddedOutPut END as 'List Changes'
UNION
SELECT CASE
WHEN @RemovedOutput IS NULL THEN (SELECT TOP 0 NULL)
ELSE @RemovedOutput END as 'List Changes'
更复杂的是,一旦我将 (Select TOP 0 NULL) 添加到我的过程中,有效结果就不再起作用了!为什么这会让它尝试转换为 Int?我知道结果不会是 Int!
Msg 245, Level 16, State 1, Procedure SantaList_TEST, Line 72
Conversion failed when converting the varchar value 'Kids added
to Santas Naughty List 27065, 28538, 28539' to data type int.
您有两个子查询,每个子查询 return 占一行。输出将有一行或两行。一种方法是:
SELECT t.*
FROM (SELECT @AddedOutPut as ListChanges
UNION
SELECT @RemovedOutput as ListChange
) t
WHERE ListChanges IS NOT NULL;
您的 CASE
语句中的 THEN (SELECT TOP 0 NULL)
是一次尝试不获取任何行的勇敢尝试。但是,FROM
子句(连同 WHERE
、GROUP BY
、HAVING
和 FETCH
/TOP
子句)真正决定了哪些行是正在 returned。 (SELECT TOP 0 NULL)
被用作标量子查询。如果它没有 return 任何东西,那么 SQL 会输入 NULL
,因此您的查询会得到彻底的简化。
此外,我怀疑在这种情况下是否真的需要 UNION
。删除重复项会产生开销。作为习惯,最好学会使用UNION ALL
,除非你真的想承担开销。