问题描述
我有一个存储过程,它有一堆输入和输出参数,因为它正在向多个表中插入值.在某些情况下,存储过程仅插入到单个表中(取决于输入参数).这是一个模拟场景来说明.
表格/数据对象:
人物
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