SQL Server程序,为什么有两个输入参数

时间:2018-03-09 14:56:10

标签: sql-server

我有这个程序,它问我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 

enter image description here

请提示吗?

3 个答案:

答案 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?