0

有人可以在这里帮助我吗?我有一个存储过程,当我运行 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级别进行哪些更改才能使其工作,我没有得到变量“结果”的结果?

4

2 回答 2

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,它将被视为输入

于 2014-03-24T15:31:31.507 回答
0

要获得返回值,您需要将其分配给变量。

获取输出参数,需要在调用过程时加上output关键字

IE:

declare @ret int, @ErrorDescription varchar(50)
exec @ret = TestSP @ErrorDescription output
select @ret,  @ErrorDescription 
于 2014-03-24T15:47:30.990 回答