【问题标题】:MS SQL Stored Procedure not returning value (or java needs to alter?)MS SQL 存储过程不返回值(或 java 需要更改?)
【发布时间】:2014-05-02 01:33:20
【问题描述】:

有人可以帮我吗?我有一个存储过程,当我运行 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 需要更改吗?

Java:

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”的结果?

【问题讨论】:

  • 您的问题是接收 status 值、错误描述 还是两者都有?
  • 我的问题是返回状态值。谢谢

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


【解决方案1】:

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

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

即:

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

【讨论】:

  • 当你说:你需要在调用过程时添加输出关键字 - 你是什么意思 - 我期望做的只是 exec TestSP @ErrorDescription = '' 并且我期望状态值返回- 如果 SP 需要修改,请告诉我需要修改的地方!
  • 您应该按照答案中的详细说明来称呼它。
  • 你不能像我在我的问题中提到的那样在 java 或 C# 中这样做。
  • 您必须在调用语言中将参数标记为输出参数,例如:C#。
  • ok on out 参数,但我希望从 SP 中获取“@status”而不是错误描述,我认为这是 Out 参数。在 SP 上需要更改什么以使状态在简单执行时返回?
【解决方案2】:

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

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

你需要SELECT @status而不是RETURN @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,它将被视为输入

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多