【发布时间】:2014-08-30 15:21:58
【问题描述】:
我想在 CASE 语句中使用来自过程的返回值。它不能是一个函数,因为该过程返回一个插入的键。
UPDATE TIM
SET CD_LINHA_EVENTO =
CASE WHEN
TIM.CD_SUBESTRUTURA_PARAMETRO = (SELECT TOP 1 SPZ.CD_SUBESTRUTURA_PARAMETRO FROM SUBESTRUTURA_PARAMETRO SPZ WITH (NOLOCK) WHERE SPZ.CD_SUBESTRUTURA = TIM.CD_SUBESTRUTURA
AND SPZ.FL_SELECAO = 1 ORDER BY SPZ.NR_ORDEM)
THEN
**EXEC [dbo].[SPRTO_NumeracaoEventos]**
ELSE
(SELECT MAX(TIM2.CD_LINHA_EVENTO) FROM #TB_INSERTED_MODIFIED TIM2 WITH(NOLOCK))
END
FROM #TB_INSERTED_MODIFIED TIM WITH (NOLOCK)
存储过程 [SPRTO_NumeracaoEventos]:
INSERT INTO TB_NUMERACAO_EVENTOS (VALOR) VALUES ('')
RETURN SCOPE_IDENTITY()
谢谢!
【问题讨论】:
-
你需要找到其他方法来实现这个逻辑。
update声明不是正确的方法。也许你需要一个触发器。 -
谢谢你,@GordonLinoff。实际上,它已经在触发器中。我试图避免 WHILE 循环并一次更新每个 #TB_INSERTED_MODIFIED 行,但我认为应该是这样... =\
-
使用 OUTPUT 参数,而不是 RETURN 值。 RETURN 用于错误和状态代码,而不是数据。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/…
标签: sql sql-server stored-procedures case procedure