我得到了一个基于一系列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重构为一个函数并使用它。