`
ronon
  • 浏览: 193753 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

SQlserver 当输入参数为可选条件

 
阅读更多

以前很懒,都是用拼接字符串的方式,加上if 语句,根据输入参数是否为空来判断是否需要在where 后加上对应字段的条件限制

但是拼接字符串很烦,又总是被转义符搞得很烦  ''''

所以想了其他办法

分三种情况(varchar,int,date)都尝试了一下

使用case when 和通配符当主角,而不是'''''''''

不难理解,怕隔天忘记所以记一笔

alter proc sp_testParam
(
   @name varchar(50),
   @ID int,
   @sDate date,
   @eDate date
)
as
begin

--懒得要死,老是不乐意去记默认值,所以打印出来望自己长点脑子

print @name+'--name'
print cast(@ID as varchar(50))+'--ID'
print cast(@sDate as varchar(50))+'--sDate'
print cast(@eDate as varchar(50))+'--eDate'

select * from benInfo
where
--varchar,使用'%%'表示包含任何字符串
name like case when @name is null or @name='' then '%%' else '%'+@name+'%' end 
--int,使用'[0-9]%'表示包含任何数字,因为该字段是ID,不需要模糊查询,则不需加通配符,完全匹配
and cast(ID as varchar(50)) like case when @ID is null or @ID=0 then '[0-9]%' else cast(@ID as varchar(50)) end
--date,该类型的默认值是'1900-01-01',因此起始日期不用理会,结束日期判断一下,未填则给无限大
and currentDate between @sDate and case when @eDate is null or @eDate='1900-01-01'

 then '9999-12-31' else @eDate end


end

--exec sp_testParam '','','','2010-09-03'

 

至此尝试了一下,在解决简单逻辑时,此方法是可行的

/*
PS.
1.意外发现,当 like 后的字符串里不带有通配符时,其作用等同于等号 =

  

*/

 

 

分享到:
评论

相关推荐

    SQL Server2005数据库经典必备基础教程

    创建存储过程时,需定义输入参数、输出参数、执行的SQL语句以及可选的返回状态值。在创建过程中需要注意遵循命名规则,不能与其他SQL语句混合在同一批处理中,并且只能在当前数据库中创建存储过程。 创建存储过程的...

    第8章 存储过程的操作与管理 sql server

    1. **参数**:包括输入参数和输出参数,用于传递数据到存储过程或从存储过程传出。 2. **操作语句**:定义存储过程执行的具体SQL操作,可能包括对其他存储过程的调用。 3. **状态值**:返回给调用者,表示存储过程...

    sqlserver函数大全.pdf

    在SQL Server中,函数的确定性和非确定性是很重要的概念,确定性函数的输出仅取决于输入参数,而非确定性函数可能受环境影响,如GETDATE(),其每次调用可能返回不同的结果。 了解和熟练使用SQL Server的函数是...

    SQL_SERVER数据库开发之存储过程应用

    SQL SERVER联机丛书中定义存储过程为可接受用户参数并由Transact-SQL语句组成的集合,可以是永久性的、局部临时的或全局临时的。创建存储过程需要熟悉T-SQL语句,以及函数和过程的概念,因为要在应用程序中调用它们...

    sqlsever存储过程

    1. **输入参数**:如示例中的@DepartmentID,只在调用时传递值。 2. **输出参数**:允许存储过程将值返回给调用者。 3. **输入/输出参数**:同时具备输入和输出功能。 六、返回值 存储过程可以使用`RETURN`语句返回...

    MSSQL2008常用自定义加密函数

    在SQL Server 2008中,数据安全是至关重要的,因此数据库管理员和开发者经常需要对敏感信息进行加密。本文将详细介绍MSSQL2008中常用的自定义加密函数,包括MD5、SHA和Base64等算法,以及如何在SQL脚本中使用这些...

    数据库实验六

    1. **定义过程头**:指定存储过程的名称、输入参数(如果有的话)和输出参数。例如,在MySQL中,一个简单的过程头可能看起来像这样: ```sql CREATE PROCEDURE ProcName(IN inputParam1 datatype, OUT outputParam...

    Arcgis_server_查询地图

    例如,使用ArcGIS REST API,可以通过URL构建查询请求,其中包含地图服务的地址、查询条件(如SQL表达式)、输出格式等参数。正确解析和展示这些数据是实现地图查询功能的关键步骤。 ### 实践案例 为了更具体地...

    基于VB.NET的圆柱齿轮减速器智能设计系统.pdf

    当需要更新或修改模型时,用户只需要在VB.NET提供的可视化界面上输入新的参数,系统会自动更新模型并保存至数据库,简化了设计流程。 此外,系统还集成了结构设计、工艺设计和产品数据管理,形成一体化的流程,提升...

    基于B_S可变条件数据库统计查询设计与实现.pdf

    1. **统计分组因素参数化**:将统计分组条件转化为可配置的参数,建立一个中间表来存储这些参数。 2. **数据记录统计**:从基础数据表中提取所需数据,依据中间表的字段结构逻辑,将统计数据插入到中间表中,完成...

    LabView图形化编程语言之sql测试程序.zip

    通过配置这些函数的属性,可以指定数据库连接字符串、SQL查询语句以及所需的输入和输出参数。 在这个测试程序中,可能包含以下关键部分: 1. **数据库连接**:LabView中的“数据库初始化”VI负责建立与SQL服务器的...

    Asp.Net投票SQL版

    此外,SQL注入防护也很重要,确保输入的数据经过参数化查询或存储过程处理。 8. **性能优化**: 为了处理大量投票,可能需要考虑缓存策略,如使用ASP.NET的Cache对象,或引入Redis等分布式缓存。同时,数据库索引...

    Silverlight4中上传EXCEL并将EXCEL文件数据插入到SQL数据库中

    在 Silverlight 4.0 应用程序中,将 Excel 文件数据上传并插入到 SQL 数据库涉及多个步骤,包括文件选择、...确保在开发过程中遵循最佳实践,如参数化查询以防止 SQL 注入攻击,以及对用户输入进行验证,确保数据质量。

    PL/SQL Developer8.04官网程序_keygen_汉化

    如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要...

    JSP的连接数据库并修改数据库代码

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); ``` 然后,通过`DriverManager.getConnection()`方法建立数据库连接。参数包括数据库URL、用户名和密码: ```java Connection ...

    Database-query-management-system.rar_labview_labview 查询_site:www

    这些接口允许LabVIEW程序连接到各种类型的数据库,如MySQL、SQL Server、Oracle等。用户输入的小区业主用户名会被作为查询条件,系统会构造SQL语句(如"SELECT * FROM 用户表 WHERE 用户名 = 'input_username'"),...

    PHP与SQL注入攻击[三]

    2. **参数化查询:** 使用预定义查询或其他参数化方法来构建SQL语句,避免直接拼接用户输入。 3. **最小权限原则:** 数据库账户应仅拥有执行必要操作所需的最低权限。 4. **日志记录与监控:** 记录所有异常访问...

    tx.rar_源码

    用户可以通过界面输入条件,比如时间范围、特定参数值,来查找历史数据。查询结果可能以表格、图表或其他可视化形式展示。 总的来说,"tx.rar_源码" 是一个利用DELPHI进行串口通信,实现地泵监控和数据管理的应用。...

    matlab开发-generateXML

    1. **接收输入**:函数首先接收一个或多个输入参数,这些参数可能是MATLAB中的数组、结构体、细胞数组等,代表要转换为XML的数据。 2. **数据预处理**:函数需要将这些非XML数据转换为可被XML表示的形式。例如,...

Global site tag (gtag.js) - Google Analytics