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

时间:2018-07-12 17:34:31

标签: sql sql-server sql-server-2014

我有一个基于一系列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由可空的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中。有什么方法可以在CheckExistsNonTypeIncreases语句中运行CASE?我不介意将CheckExistsNonTypeIncreases更改为某个函数是否可行,但是除了这个CASE之外,我无法更改视图。我将其作为存储过程的唯一原因是函数需要一个参数,而事实并非如此。

编辑-

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

1 个答案:

答案 0 :(得分:3)

  

有没有办法在CASE中运行CheckExistsNonTypeIncreases   声明?

不。 (实际上,CASE是一个表达式,而不是在声明时,用哪种解释为什么不这样)。您可以做的就是将proc重构为一个函数并使用它。