你如何 运行 在视图中的 CASE 语句中存储过程或函数?
How do you run a stored procedure or function in a CASE statement in a view?
我有一个基于一系列 CASE
语句的视图。我必须做的一项检查是,如果给定列的值为 0 并且存在某些列为 NOT NULL
的任何其他记录,则 return 一个字符串。
看起来像这样:
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
中。 CASE
语句中的运行CheckExistsNonTypeIncreases
有什么办法吗?如果可行,我不介意将 CheckExistsNonTypeIncreases
更改为一个函数,但我无法更改视图,除了这个 CASE
。我将其设为存储过程的唯一原因是函数需要参数,而这不需要。
编辑 --
弄清楚了,当我把它变成一个函数时它不起作用,因为我没有使用 [dbo] 前缀。
Is there any way to run CheckExistsNonTypeIncreases in the CASE
statement?
没有。 (实际上 CASE 是一个表达式,而不是 at 语句,这解释了为什么不)。您可以做的是将 proc 重构为一个函数并使用它。
我有一个基于一系列 CASE
语句的视图。我必须做的一项检查是,如果给定列的值为 0 并且存在某些列为 NOT NULL
的任何其他记录,则 return 一个字符串。
看起来像这样:
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
中。 CASE
语句中的运行CheckExistsNonTypeIncreases
有什么办法吗?如果可行,我不介意将 CheckExistsNonTypeIncreases
更改为一个函数,但我无法更改视图,除了这个 CASE
。我将其设为存储过程的唯一原因是函数需要参数,而这不需要。
编辑 --
弄清楚了,当我把它变成一个函数时它不起作用,因为我没有使用 [dbo] 前缀。
Is there any way to run CheckExistsNonTypeIncreases in the CASE statement?
没有。 (实际上 CASE 是一个表达式,而不是 at 语句,这解释了为什么不)。您可以做的是将 proc 重构为一个函数并使用它。