我正在尝试使用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也将此参数显示为 Input/Output
类型。如何构造此存储过程以便 @retval
只属于类型 Output
?
2条答案
按热度按时间vybvopom1#
正如@gserg所说,你不能。
在sql中,一种
OUTPUT
参数同时起作用INPUT
以及OUTPUT
,看到这个答案了吗你得到了一个
INOUT
值,因为用于引用oracle过程参数类型的MapIN
,OUT
以及INOUT
.来自dba-oracle.com:
作为模式传递的变量
IN
总是只读的。变量使用IN
模式可由过程/函数读取和使用,但不能更改,也不能作为赋值操作的接收器。传入的变量
OUT
模式用于将信息从过程传递回调用程序。它是一个只写变量,在块给它赋值之前没有值。传入的变量
INOUT
模式具有IN
以及OUT
模式。变量值被传入并可由过程读取。该过程还可以更改该值,并在过程完成时将其复制回传递的变量。bttbmeg02#
如果管理工作室看到
@retval
作为OUTPUT
,您将能够从外部读取此值。事实上@retval
也被标记为输入不相关。