我有这个程序,它问我2个输入参数,不知道为什么我将第2个参数(@monto
)声明为输出:
ALTER PROCEDURE [dbo].[SP_MONTO_APROBADO]
@ID INT,
@MONTO INT OUTPUT
AS
BEGIN
SELECT @MONTO = MONTO_APROBADO
FROM LICITACION
WHERE COD_PROYECTO = @ID
END
请提示吗?
答案 0 :(得分:1)
仅仅因为参数被标记为output
,这并不意味着它不能提供一个值作为输入,这将在存储过程中可读。
也就是说,T-SQL没有像inout
那样的概念,因为所有output
参数都是有效的。
如果您不想提供值,请确保参数可以接受null
,然后将其作为输入值提供。
答案 1 :(得分:1)
因为OUTPUT参数实际上是输入输出参数
答案 2 :(得分:0)
使用带有OUTPUT
参数的存储过程时,仍需要在执行过程时指定它。
我不知道该图片的来源,但是,您需要使用SQL:
DECLARE @ID int, @Mondo int;
SET @ID = 1; --guessed value
EXEC SP_MONTO_APROBADO @ID, @Mondo OUTPUT;
PRINT @Mondo; --Don't know what you're doing with the OUTPUT value
不指定第二个第二个参数会导致语法错误;因为你没有为SP提供足够的参数。无论输入或输出中的参数是否仍然需要在执行时提供它们,以便数据引擎知道从哪里获取值,或者存储结果的值。
此外,它的工作注意到为这些对象添加前缀是一个坏主意。 Is the sp_ prefix still a no-no?