存储过程之查询的另类写法

  在我开始记录我推荐的写法前,我先问你一个问题——假如现在有一个用户表SysUser,其中有Id、UserName、DeptId、CreateDate等字段,现在需要你写一个存储过程来查询用户表的信息,另外在查询时会根据上面列出的四个字段中的一个或多个作为条件来查询,你的写法是怎么样的呢?

  在你想出你的写法后,来看看我是怎么写的吧。

CREATE PROCEDURE SysUser_GetTable
 @Id                 INT=NULL
,@UserName           NVARCHAR(50)=NULL
,@DeptId             INT=NULL
,@BeginCreateDate    DATETIME=NULL
,@EndCreateDate      DATETIME=NULL
AS
declare @strSQL   nvarchar(100) 
declare @strWhere nvarchar(1000)=''

set @strWhere=@strWhere    
    + ISNULL(' and Id='''+LTRIM(@Id)+'''','')
    + ISNULL(' and UserName like ''%'+LTRIM(@UserName)+'%''','')
    + ISNULL(' and DeptId = '''+LTRIM(@DeptId)+'''','') 
    + ISNULL(' and CreateDate>='''+LTRIM(@BeginCreateDate)+'''','')
    + ISNULL(' and CreateDate<='''+LTRIM(@EndCreateDate)+'''','')

IF LEN(@strWhere)>0 
    SET @strWhere = STUFF(@strWhere,1,4,' WHERE')

SET @strSQL='SELECT * FROM SysUser '+@strWhere
EXEC(@strSQL)

  我不知道你的写法是不是用if来判断传进来的参数是否为空来拼接SQL,又或者不管参数是否为空直接用like来查询?

  上面的写法主要利用了ISNULL函数,用来判断传进来的参数是否为空。

  个人觉得这样的写法有两个好处:

1、把存储过程的条件放在一处来写,这样使用整个存储过程条理更清晰、更优雅。

2、解决了拼接出的SQL语句存在可有可无的条件,比如像1=1这样的条件。

  如果你有更好的写法,或者你觉得这样写有什么缺点,我也希望你能指正一下,希望大家能把一些好的东西分享出来,彼此共同成长。

转载于:https://www.cnblogs.com/Lau7/p/5397575.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值