使用表达式避免拼接SQL语句

在SQL语句编写过程中,无论在存储过程中还是在程序中,有时为了使语句兼容全部情况与某字段的特殊情况,不得不拼接SQL字串

如下表

商品ID类别ID
11
21
32
43
53

如果我们要写一个SQL,改SQL可通过类别ID获得该类别的商品ID,并且要求兼容传入类别ID为0时获得所有商品,我们不得不拼接SQL了

--@类别ID为传入的参数
DECLARE @Sql NVARCHAR(500)
SET @Sql='SELECT * FROM 商品'
IF(@类别ID!=0)
    SET @Sql=@Sql+'WHERE 类别ID='+Cast@类别ID as NVARCHAR(20))
EXEC (@Sql)

这样的方法不仅要对数据类型转换、引号配对而且语法检查也需要通过PRINT语句输出后进行检查,最要命的是如果拼接的语句是对临时表操作,由于EXEC是独立上下文运行的,导致外部无法访问拼接语句生成的临时表

其实可以通过表达式优化这句SQL,写成如下形式即可避免拼接SQL

SELECT * FROM 商品 WHERE @类别ID=0 OR 类别ID=@类别ID

 

 

 

转载于:https://www.cnblogs.com/overload/p/3724890.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值