如何在SQL Server存储过程/函数中声明输入输出参数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL Server存储过程/函数中声明输入输出参数?相关的知识,希望对你有一定的参考价值。
在Oracle中,
我们可以声明输入输出参数(不仅仅是输入或输出),如下所示:
Create Or Replace Procedure USERTEST.SimpleInOutProcedure(
p_InputInt Int,
p_OutputInt out Int,
p_InputOutputInt in out Int
) AS
BEGIN
p_OutputInt := p_InputInt + 1;
p_InputOutputInt := p_InputOutputInt + p_InputOutputInt;
END;
但是,当我尝试在SQL Server中声明这样的时,脚本将无法编译:
create procedure SimpleInOutProcedure
@p_InputInt int, @p_OutputInt int input output
As
Begin
Select * from TestTableCommonA;
End
单词“input”不是预期的,因此在SQL Server Management Studio中不是蓝色的:
我的脚本出了什么问题,如何在SQL Server存储过程/函数中声明输入输出参数?
我想这样做是因为我需要为之前为Oracle DB创建的SQL Server DB创建“等效”阅读器,并具有读/出参数。
答案
如果将参数声明为OUTPUT,则它将充当“输入”和“输出”
CREATE PROCEDURE SimpleInOutProcedure
(
@p_InputInt INT,
@p_OutputInt INT OUTPUT
)
AS
BEGIN
SELECT
@p_OutputInt = @p_OutputInt
END
GO
DECLARE @p_OutputInt int = 4
EXEC SimpleInOutProcedure @p_InputInt = 1, @p_OutputInt = @p_OutputInt OUTPUT
SELECT @p_OutputInt
另一答案
这是SQL Input&Output参数的示例代码。
CREATE PROCEDURE [dbo].[sample_Insert]
@name varchar(500),
@entryby int,
@RetVal INT = 0 OUT
AS
SET NOCOUNT ON
INSERT INTO dbo.Master
( name ,
entry_date ,
entry_by
)
VALUES ( @name , -- service_name - varchar(1000)
dbo.GetActDate() , -- entry_date - datetime
@entryby -- entry_by - int
)
IF @@ERROR = 0
BEGIN
SET @RetVal = 1 -- 1 IS FOR SUCCESSFULLY EXECUTED
End
ELSE
BEGIN
SET @RetVal = 0 -- 0 WHEN AN ERROR HAS OCCURED
End
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
以上是关于如何在SQL Server存储过程/函数中声明输入输出参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在sql server中创建一个存储过程中的varchar型的输入参数默认值为空