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


      在我开始记录我推荐的写法前,我先问你一个问题——假如现在有一个用户表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这样的条件。

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

  • 相关阅读:
    jquery常用语句
    记录一个奇异的问题
    冰块渲染2
    冰块渲染
    GCAlloc 问题一则
    矩阵基础3
    优化 Overdraw 和 GrabPass
    优化平面法线贴图
    环境模拟
    使用 GPU 加速计算
  • 原文地址:https://www.cnblogs.com/Lau7/p/5397575.html
Copyright © 2020-2023  润新知