首页 > 解决方案 > 如何在视图中的 CASE 语句中运行存储过程或函数?

问题描述

我有一个基于一系列CASE陈述的观点。我必须做的一项检查是给定列的值是否为 0 并且是否存在任何其他记录,其中某些列NOT NULL返回一个字符串。

它看起来像这样:

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. 有没有办法CheckExistsNonTypeIncreasesCASE语句中运行?如果可行,我不介意更改CheckExistsNonTypeIncreases为一个函数,但除了这个之外我无法更改视图CASE。我将其设为存储过程的唯一原因是函数需要一个参数,而这不需要。

编辑 -

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

标签: sqlsql-serversql-server-2014

解决方案


有没有办法在 CASE 语句中运行 CheckExistsNonTypeIncreases?

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


推荐阅读