我可以在存储过程中拥有一个可选的OUTPUT参数吗?[英] Can I have an optional OUTPUT parameter in a stored procedure?

本文是小编为大家收集整理的关于我可以在存储过程中拥有一个可选的OUTPUT参数吗?的处理方法,想解了我可以在存储过程中拥有一个可选的OUTPUT参数吗?的问题怎么解决?我可以在存储过程中拥有一个可选的OUTPUT参数吗?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个存储过程,它有一堆输入和输出参数,因为它正在向多个表中插入值.在某些情况下,存储过程仅插入到单个表中(取决于输入参数).这是一个模拟场景来说明.

表格/数据对象:

人物

Id
Name
Address

姓名

Id
FirstName
LastName

地址

Id
Country
City

假设我有一个插入一个人的存储过程.如果地址不存在,我不会将其添加到数据库中的 Address 表中.

因此,当我生成调用存储过程的代码时,我不想麻烦添加 Address 参数.对于 INPUT 参数,这是可以的,因为 SQL Server 允许我提供默认值.但是对于 OUTPUT 参数,我应该在存储过程中做什么以使其成为可选参数,这样我就不会收到错误...

<块引用>

过程或函数"Person_InsertPerson"需要参数'@AddressId',未提供.

推荐答案

输入和输出参数都可以指定默认值.在这个例子中:

CREATE PROCEDURE MyTest
  @Data1 int
 ,@Data2 int = 0
 ,@Data3 int = null output

AS

PRINT @Data1
PRINT @Data2
PRINT isnull(@Data3, -1)

SET @Data3 = @Data3 + 1

RETURN 0

第一个参数是必需的,第二个和第三个是可选的——如果调用例程没有设置,它们将被分配默认值.尝试在 SSMS 中使用不同的值和设置来处理它和以下测试调用例程,看看它们是如何协同工作的.

DECLARE @Output int

SET @Output = 3

EXECUTE MyTest
  @Data1 = 1
 ,@Data2 = 2
 ,@Data3 = @Output output

PRINT '---------'
PRINT @Output

本文地址:https://www.itbaoku.cn/post/1793943.html