Sql 存储过程输出变量存储为输入/输出类型

Sql 存储过程输出变量存储为输入/输出类型,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我正在尝试使用JavaSQLAPI获取MicrosoftSQLServer中存储过程的元数据 这是存储过程的结构: CREATE PROCEDURE [dbo].[testproc] (@rolloverType AS integer, @retval nvarchar(50) output) AS BEGIN SET NOCOUNT ON; SELECT @retval = [col1] FROM [dbo].[Table_1] WHERE

我正在尝试使用JavaSQLAPI获取MicrosoftSQLServer中存储过程的元数据

这是存储过程的结构:

CREATE PROCEDURE [dbo].[testproc] 
    (@rolloverType AS integer,
     @retval nvarchar(50) output)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT @retval = [col1]
    FROM [dbo].[Table_1]
    WHERE col3 = @rolloverType;
END
GO

但是,JavaSQLAPI指出@retval是一种INOUT类型,MicrosoftSQLServerManagementStudio也将此参数显示为输入/输出类型。如何构造此存储过程以使@retval仅为输出类型?

如果Management Studio将@retval视为输出,您将能够从外部读取此值。@retval也被标记为输入这一事实与此无关

正如@GSerg评论的那样,你不能

在SQL中,输出参数充当输入和输出,请参见

您之所以获得INOUT值,是因为映射用于引用ORACLE过程参数类型,即IN、OUT和INOUT

发件人:

作为模式传入的变量始终是只读的。变数 程序/功能可以读取和使用“在模式下使用”,但可以 不能更改,也不能作为分配的接收者 手术

传入传出模式的变量用于将信息从 该过程与调用程序相关联。它是一个只写变量,并且 在块为其指定值之前没有值

在INOUT模式中传递的变量具有in和 退出模式。变量值被传入并可由 程序该程序还可以更改该值,并将 在过程完成时复制回传递的变量


SQL Server中没有仅输出的参数。当您有Java代码检查其类型是否为INOUT或just OUT时,这并不是无关紧要的