SQL server 的if ..elif 用法(IF...ELSE IF 语句)
在 SQL Server 中,可以使用 IF...ELSE IF 语句来根据条件执行不同的操作。IF...ELSE IF 语句的语法如下:
IF condition
statement(s)
ELSE IF condition
statement(s)
ELSE IF condition
statement(s)
statement(s)
END IF;
其中,condition 是一个逻辑表达式,用于判断条件是否为真。如果 condition 为真,则执行相应的 statement(s)。如果 condition 为假,则跳过该条件并检查下一个 ELSE IF 条件,如果没有 ELSE IF 条件,则执行 ELSE 块中的语句。
例如,以下是一个使用 IF...ELSE IF 语句的示例,该示例根据产品价格显示不同的信息:
DECLARE @Price DECIMAL(10, 2) = 50.00;
IF @Price < 25.00
PRINT 'This is a low-priced product.';
ELSE IF @Price >= 25.00 AND @Price < 50.00
PRINT 'This is a moderately-priced product.';
ELSE IF @Price >= 50.00 AND @Price < 75.00
PRINT 'This is a high-priced product.';
PRINT 'This is a premium-priced product.';
在这个示例中,我们首先声明一个变量 @Price,并将其赋值为 50.00。然后,我们使用 IF...ELSE IF 语句根据价格范围显示不同的信息。
请注意,条件是按顺序检查的,因此第一个条件是 @Price < 25.00。如果该条件为真,则执行相应的语句并跳过其他条件。否则,检查下一个 ELSE IF 条件,以此类推,直到找到一个条件为真为止。如果没有条件为真,则执行 ELSE 块中的语句。
在实际环境中应用:
1、
@HYKH
长度为0,
@ORDER_NO
长度为0或不为0 并且
@HXDATE
长度为0 时,用于操作员查询用;
2、
@HYKH
长度为0,
@ORDER_NO
长度为0或不为0 并且
@HXDATE
长度大于0 时,用于财务查询是否有核销记录用;
3、 当操作员输入的 会员卡号
@HYKH
在会员管理表VBU1 中存在时 即
@HYKH
=
@VCB04
时,更新表中字段
核销状态='已核销',核销人=
@CZR_NO
, 核销时间=
GETDATE()
, 会员卡号=
@VCB04
DECLARE @ORDER_NO VARCHAR(255) ,
@CZR_ID VARCHAR(20) ,
@HYKH VARCHAR(50) ,
@CZR_NO VARCHAR(50) ,
@VCB04 VARCHAR(50) , --会员卡号
@HXDATE VARCHAR(50)
SET @HXDATE='2023-03-20' --核销时间
SET @ORDER_NO = '' --订单号
SET @CZR_ID = '569' --工号
SET @HYKH= ''--会员卡号
SELECT @CZR_NO=BCE02 FROM BCE1 WHERE BCE01=@CZR_ID
SELECT @VCB04=VAA02 FROM VAA1 WHERE VAA01= @HYKH
IF LEN(@HYKH)=0 AND LEN(@ORDER_NO)>=0 AND LEN(@HXDATE)=0 --AND LEN(@VCB04)=0
BEGIN
SELECT
核销状态 AS 核销状态,
订单编号, 粉丝昵称, 会员姓名, 收货姓名或自提人, 联系电话, 商品名称,
商品数量, [商品单价(折扣前)], [商品单价(折扣后)], [商品价格(折扣前)],
[商品价格(折扣后)], 商品小计, 应收款, 下单时间, 付款时间, OPENID ,核销人,
核销时间,会员卡号
FROM 老商城待核验订单导出
WHERE 1=1 AND 订单编号 LIKE '%'+@ORDER_NO+'%' --AND CONVERT(VARCHAR(10),核销时间,120) LIKE '%'+@HXDATE+'%'
ELSE IF LEN(@HYKH)=0 AND LEN(@ORDER_NO)>=0 AND LEN(@HXDATE)>0
BEGIN
SELECT
核销状态 AS 核销状态,
订单编号, 粉丝昵称, 会员姓名, 收货姓名或自提人, 联系电话, 商品名称,
商品数量, [商品单价(折扣前)], [商品单价(折扣后)], [商品价格(折扣前)],
[商品价格(折扣后)], 商品小计, 应收款, 下单时间, 付款时间, OPENID ,核销人,
核销时间,会员卡号
FROM 老商城待核验订单导出
WHERE 1=1 AND 订单编号 LIKE '%'+@ORDER_NO+'%' AND CONVERT(VARCHAR(10),核销时间,120) LIKE '%'+@HXDATE+'%'
BEGIN
IF EXISTS (SELECT VCB04 FROM VBU1 WHERE VCB04=@VCB04)
BEGIN
IF EXISTS (SELECT 订单编号 FROM 老商城待核验订单导出 WHERE 订单编号=@ORDER_NO AND 核销人 IS NULL AND 核销时间 IS NULL AND 会员卡号 IS NULL AND 核销状态 ='未核销')
BEGIN
UPDATE 老商城待核验订单导出 SET 核销状态='已核销',核销人= @CZR_NO , 核销时间= GETDATE() , 会员卡号= @VCB04
WHERE 订单编号=@ORDER_NO AND 核销人 IS NULL AND 核销时间 IS NULL AND 会员卡号 IS NULL AND 核销状态 ='未核销';
SELECT
核销状态 AS 核销状态,
订单编号, 粉丝昵称, 会员姓名, 收货姓名或自提人, 联系电话, 商品名称, 商品数量,
[商品单价(折扣前)], [商品单价(折扣后)], [商品价格(折扣前)], [商品价格(折扣后)], 商品小计, 应收款, 下单时间, 付款时间, OPENID ,核销人, 核销时间,会员卡号
FROM 老商城待核验订单导出
WHERE 1=1 AND 订单编号 =@ORDER_NO;
BEGIN
RAISERROR('订单编号有误或已核销,请检查后再提交!', 16, 1) WITH NOWAIT