如何在视图中的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由可为null的money列组成。

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]前缀。

有没有办法在CASE中运行CheckExistsNonTypeIncreas陈述

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

最新更新