如何更改存储过程的输出数据类型?我想输出货币数据类型但过程总是返回int

时间:2014-10-02 00:05:12

标签: sql stored-procedures

这是我的程序:

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。如何改变程序,所以返回价值会是金钱?

2 个答案:

答案 0 :(得分:0)

存储过程返回值用于返回退出代码,它是整数。

您应该定义输出参数

CREATE PROCEDURE mysp     @Maxval MONEY OUTPUT

http://msdn.microsoft.com/en-us/library/ms188655.aspx

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