你如何 运行 在视图中的 CASE 语句中存储过程或函数?

How do you run a stored procedure or function in a CASE statement in a view?

我有一个基于一系列 CASE 语句的视图。我必须做的一项检查是,如果给定列的值为 0 并且存在某些列为 NOT NULL 的任何其他记录,则 return 一个字符串。

看起来像这样:

SELECT
    CASE WHEN (Column1 = 0 AND EXEC CheckExistsNonTypeIncreases =  1) THEN 'Missing or invalid data' ELSE '' END AS IncreaseCheck
FROM MyTable1

MyTable1 由可为空的货币列组成。

CheckExistsNonTypeIncreases 看起来像这样:

DECLARE @Exists BIT

IF EXISTS(SELECT * FROM [dbo].MyTable1 WHERE (Column2 IS NOT NULL OR
                                                                       Column3 IS NOT NULL OR
                                                                       Column4 IS NOT NULL OR
                                                                       Column5 IS NOT NULL OR
                                                                       Column6 IS NOT NULL))
BEGIN
    SET @Exists = 1
END
ELSE
BEGIN
    SET @Exists = 0
END

RETURN @Exists

视图不能有变量所以我不能运行 SP 提前检查。我也无法将 EXEC 语句嵌入到 CASE 中。 CASE语句中的运行CheckExistsNonTypeIncreases有什么办法吗?如果可行,我不介意将 CheckExistsNonTypeIncreases 更改为一个函数,但我无法更改视图,除了这个 CASE。我将其设为存储过程的唯一原因是函数需要参数,而这不需要。

编辑 --

弄清楚了,当我把它变成一个函数时它不起作用,因为我没有使用 [dbo] 前缀。

Is there any way to run CheckExistsNonTypeIncreases in the CASE statement?

没有。 (实际上 CASE 是一个表达式,而不是 at 语句,这解释了为什么不)。您可以做的是将 proc 重构为一个函数并使用它。