我可以在存储过程中有一个可选的 OUTPUT 参数吗?

2023-10-26数据库问题
0

本文介绍了我可以在存储过程中有一个可选的 OUTPUT 参数吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I have a stored procedure that has a bunch of input and output parameters because it is Inserting values to multiple tables. In some cases the stored proc only inserts to a single table (depending on the input parameters). Here is a mocked up scenario to illustrate.

表格/数据对象:

Id
Name
Address

姓名

Id
FirstName
LastName

地址

Id
Country
City

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

Say I have a stored procedure that inserts a person. If the address doesn't exist I won't add it to the Address table in the database.

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

Thus when I generate the code to call the stored procedure I don't want to bother adding the Address parameter. For INPUT parameters this is ok because SQL Server allows me to supply default values. But for the OUTPUT parameter what do I do in the stored procedure to make it optional so I do not receive an error...

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

推荐答案

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

Both input and output parameters can be assigned defaults. In this example:

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 中处理它和以下测试调用例程,以查看它们如何协同工作.

the first paramter is required, and the second and third are optional--if not set by the calling routine, they will be assigned the default values. Try messing around with it and the following test-call routine in SSMS using different values and settings to see how it all works together.

DECLARE @Output int

SET @Output = 3

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

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

这篇关于我可以在存储过程中有一个可选的 OUTPUT 参数吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Mysql目录里的ibtmp1文件过大造成磁盘占满的解决办法
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致...
2025-01-02 数据库问题
151

按天分组的 SQL 查询
SQL query to group by day(按天分组的 SQL 查询)...
2024-04-16 数据库问题
77

SQL 子句“GROUP BY 1"是什么意思?意思是?
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)...
2024-04-16 数据库问题
62

MySQL groupwise MAX() 返回意外结果
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)...
2024-04-16 数据库问题
13

在 Group By 查询中包含缺失的月份
Include missing months in Group By query(在 Group By 查询中包含缺失的月份)...
2024-04-16 数据库问题
12

为什么 Mysql 的 Group By 和 Oracle 的 Group by 行为不同
Why Mysql#39;s Group By and Oracle#39;s Group by behaviours are different(为什么 Mysql 的 Group By 和 Oracle 的 Group by 行为不同)...
2024-04-16 数据库问题
13