2014-10-02 60 views
0

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

ALTER PROCEDURE spMaxOfInvoiceTotal 
AS 
BEGIN 
    DECLARE @max MONEY 
    SET @max = (SELECT MAX(InvoiceTotal) FROM Invoices) 

    PRINT @MAX 
    RETURN @MAX 
END 
GO 

但是,当我执行,它返回INT不要钱类型。

DECLARE @return_value int 

EXEC @return_value = [dbo].[spMaxOfInvoiceTotal] 

SELECT 'Return Value' = @return_value 
GO 

因此,值不正确。它必须是37966.19。但是手续回来37966.

即使我改变@return_value钱,我仍然得到int。如何改变程序,所以返回值会是金钱?

回答

0

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

你应该定义输出参数

CREATE PROCEDURE mysp @Maxval货币产出

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

+0

现在程序输出两个结果。 @max 37966.16 return 37966 如何获得只有一个结果(@max 37966.16)? – Timur 2014-10-02 00:24:52

+0

@Timur,你可以做返回和单独选择变量,签出http://stackoverflow.com/questions/1589466/execute-stored-procedure-with-an-output-parameter – radar 2014-10-02 00:45:31

+0

@Timur,你是否能够修理它? – radar 2014-10-02 14:20:48

0

这是什么RDBMS? SQL Server

在SQL Server返回从存储过程是总是INT,你不能改变的 - 它通常被用来传达回一个成功/失败的标志,或“受影响的行数”一个信息。

如果以“回归”一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 
相关问题