MS SQL存储过程没有返回值(或java需要更改?)

时间:2014-03-24 15:30:24

标签: java sql stored-procedures jdbc mssql-jdbc

有人可以在这帮助我,我有一个存储过程,当我运行SP

时没有返回任何值

运行为 - 所以在我的java代码中我正在做exec TestSP(?)并设置1输入参数:

运行为:

的MS SQL控制台上的

exec TestSP @ErrorDescription=''

在这两方面,我什么也得不回来。

我没有输出只是命令已成功完成,任何想法我需要更改以使此存储过程返回值?

- TESTSP

USE [TESTDB]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[Testtbl] @ErrorDescription VARCHAR(40) OUTPUT
AS
    DECLARE @status INT
    SET @status = (
                    SELECT status
                        FROM Testtbl
                  )
    IF @status = 0
        SET @ErrorDescription = 'OK'
    ELSE
        SET @ErrorDescription = 'FAIL'
    RETURN @status

我需要在java级别更改以使此工作或SP需要更改吗?

爪哇:

stmt = connection.prepareCall(sql);
stmt.setString(1, errorDesc);
stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
stmt.executeUpdate();
String result = stmt.getString(2);

System.outprintln("Result is: "+result);

需要在java级别进行哪些更改才能使其正常工作,我没有得到变量“result”的结果?

2 个答案:

答案 0 :(得分:0)

RETURN关键字不用于返回值。要返回,您需要SELECT语句或OUTPUT变量。

阅读RETURN文件http://technet.microsoft.com/en-us/library/ms174998.aspx

而不是RETURN @status您需要SELECT @status

以下是使用OUTPUT

的正确示例
CREATE PROC testSP
    (
        @pOut VARCHAR(40) OUTPUT
    )
AS
    BEGIN
        DECLARE @something INT = 1;

        IF @something = 0
            SET @pOut = 'Zero'

        IF @something = 1
            SET @pOut = 'One'
    END

DECLARE @outparam VARCHAR(10)
EXEC testSP @pOut = @outparam OUTPUT
SELECT @outparam

正如您所见,OUTPUT参数需要设置为某个值。如果您未指定OUTPUT,则会将其视为输入

答案 1 :(得分:0)

要获得返回值,您需要将其指定给变量。

要获取输出参数,需要在调用过程

时添加output关键字

即:

declare @ret int, @ErrorDescription varchar(50)
exec @ret = TestSP @ErrorDescription output
select @ret,  @ErrorDescription