SQL SERVER存储过程,参数默认值设置

本文深入探讨了在SQL存储过程中利用默认参数确保语法通过与实参执行的逻辑,通过两个示例详细解释了如何为特定参数设置默认值,并在不同情况下根据传入实参的完整度来执行存储过程。实例代码清晰展示了参数默认值的设置及应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务背景:当我们要对存储过程设置一些传入参数时,如果存在传入参数允许不传入,那么为了保证参数的完整性,必须对存储过程的形参设置默认值,那么当执行存储过程,传入实参不完整时,SQL会自动检查是否有对应缺省实参对应的形参默认值,如果有,则语法通过,按形参默认值运行存储过程(存储过程中使用这个默认值,如果需要使用的话)。如果传入实参完整,对应形参的默认值按实参值执行;


例如:销售单调用存储过程,零售用户和合作商家给的优惠可能不一致,前者永远都给0.99的折扣,而合作商家根据不同等级,可能给0.99也可能不给0.99,传入多少折扣就按多少折扣计算,那么零售用户调用存储过程则可以少传入一个实参(折扣),而存储过程本身形参对应设置一个默认值(折扣=0.99),保证语法通过,而合作商家传入完整实参(折扣),按真实传入计算。


说得再多不如自己动手试试,以事实说话,加深理解,以下示例转自网上;

Example1:

USE AdventureWorks2008R2;
GO
IF OBJECT_ID('Sales.uspGetSalesYTD', 'P') IS NOT NULL
    DROP PROCEDURE Sales.uspGetSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetSalesYTD
@SalesPerson nvarchar(50) = NULL  -- NULL default value
AS 
    SET NOCOUNT ON; 

-- Validate the @SalesPerson parameter.
IF @SalesPerson IS NULL
BEGIN
   PRINT 'ERROR: You must specify the last name of the sales person.'
   RETURN
END
-- Get the sales for the specified sales person and 
-- assign it to the output parameter.
SELECT SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
WHERE LastName = @SalesPerson;
RETURN
GO

Example 2:

IF OBJECT_ID('dbo.my_proc', 'P') IS NOT NULL
    DROP PROCEDURE dbo.my_proc;
GO
CREATE PROCEDURE dbo.my_proc
    @first int = NULL,  -- NULL default value
    @second int = 2,    -- Default value of 2
    @third int = 3      -- Default value of 3
AS 
    SET NOCOUNT ON;
    SELECT @first, @second, @third;
GO

最后,总结一下,设置默认参数的逻辑就是:要么传入参数根本就不传入这个设置默认值的参数对应的实参(传入参数5个,1个默认的,值传入4个参数),要么传入实参按实参执行;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值