这是我的程序:
ALTER PROCEDURE spMaxOfInvoiceTotal
AS
BEGIN
DECLARE @max MONEY
SET @max = (SELECT MAX(InvoiceTotal) FROM Invoices)
PRINT @MAX
RETURN @MAX
END
GO
但是当我执行时,它返回int而不是money类型。
DECLARE @return_value int
EXEC @return_value = [dbo].[spMaxOfInvoiceTotal]
SELECT 'Return Value' = @return_value
GO
因此,值不正确。它必须是37966.19
。但是程序返回37966.
即使我改变@return_value
钱,我仍然会得到int。如何改变程序,所以返回价值会是金钱?
答案 0 :(得分:0)
存储过程返回值用于返回退出代码,它是整数。
您应该定义输出参数
CREATE PROCEDURE mysp @Maxval MONEY OUTPUT
答案 1 :(得分:0)
这是什么RDBMS? SQL Server ?
SQL Server中存储过程的返回值始终 INT
,您无法更改 - 它通常用于表示成功/ failure标志,或“受影响的行数”信息。
如果您要“返回”MONEY
(或更好的:DECIMAL
)值,您可以使用OUTPUT
参数(对单个值有效),或者您需要返回带有该值的结果集。
所以在你的情况下,你可以尝试类似的东西:
CREATE PROCEDURE GetMaxOfInvoiceTotal
@MaxValue DECIMAL(20,4) OUTPUT
AS
BEGIN
SET @MaxValue = (SELECT MAX(InvoiceTotal) FROM Invoices)
END
GO
然后像这样调用这个存储过程:
DECLARE @RC INT
DECLARE @MaxValue DECIMAL(20,4)
EXECUTE @RC = [dbo].[GetMaxOfInvoiceTotal] @MaxValue OUTPUT
GO