我有一个基于一系列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]前缀。
答案 0 :(得分:3)
有没有办法在CASE中运行CheckExistsNonTypeIncreases 声明?
不。 (实际上,CASE是一个表达式,而不是在声明时,用哪种解释为什么不这样)。您可以做的就是将proc重构为一个函数并使用它。