含多项查询条件的存储过程(SQL2008)

SQL Server 存储过程 分页、条件查询 SQL Server 存储过程 分页、条件查询2019/08/01 18:17 2019/08/01 18:17 --切换到db_StuManagement数据库 use db_StuManagement go --分页查询 --判断存储过程是否存在 if exists(SELECT * FROM sys.objects where name='proc_PagePaging') drop... 阅读详情

 在做一个搜索时,有多项搜索条件,如果这么多条件单独在程序里判断是很麻烦的。今天花几个小时的时间才做好这个存储过程,用这么长别笑话我笨啊,呵呵,发现很多基础的语法都忘了,当然用SQL2008也发现了些新问题。

原理:把条件进行字符串拼接,就是判断传入的各个条件,如果传入符合条件的值了,则在拼接此条件语句,否则不拼接此条件。也就是我在页面上存在多条件查找时,如果一个文本框里不输入值了,则传入空字符串,存储过程判断如果是空字符串就不拼接此条件,此时在写代码时,省了很多判断。

详细代码如下所示,这里对代码需要注意的地方说下,也是我在做时出问题的地方: 

1、如果数据库是数字类型,需要利用CONVERT(varchar(8000),@AppID)转换为字符串,如下代码中的:@strWhere=@strWhere+' and AppID='+CONVERT(varchar(8000),@AppID) 

2、在数据库4个单撇号才翻译成一个单撇号,在进行字符串相等匹配时要注意前后有个单撇号,如下代码中的:@strWhere=@strWhere+' and UserIP='+''''+@UserIP+'''' 当然也可以这么写@strWhere=@strWhere+' and UserIP='''+@UserIP+'''' 原因是在字符串常量中要输出一个单撇号,需要写2个单撇号,如要输出I'm a student 需要写成select 'I''m a student'  

3、字符串模糊匹配别忘'%搜索内容%'前后的单撇号 如下代码中的:@strWhere=@strWhere+' and UserName like '+''''+'%'+@UserName+'%'+''''  为了阅读方便我把常量字符串%单独拿出来,对于常量字符串前后有单撇号括起来 

4、对于ntext类型进行字符串拼接时,必须转换为varchar否则出现“ntext 和varchar 在equal to 运算符中不兼容”的错误提示,如下代码中的:@strWhere=@strWhere+' and PageUrl like '''+'%'+''+CONVERT(varchar(8000),@PageUrl)+''+'%''' 

5、对于日期字段本来我想传入的是日期类型,所以直接进行比较,但结果没成功。原因是此处为进行字符串拼接,所以首先需要把传入的日期参数转化为字符串(如下面的:CONVERT(varchar(100),@StartLogTime,23)),然后再把此字符串转化为日期,当然这里的转化函数需要写到字符串常量里。如下面的:@strWhere=@strWhere+' and LogTime>=cast('+''''+CONVERT(varchar(100),@StartLogTime,23)+''''+' as datetime) ' 比如传入的日期为2010-12-01,则最后形成的SQL语句是:and LogTime>=cast('2010-12-01' as datetime)

 

USE [SRLogDB]

GO

 

SET ANSI_NULLS ON

GO

 

SET QUOTED_IDENTIFIER ON

GO

 

------------------------------------

--用途:查询记录信息

 

------------------------------------

CREATE PROCEDURE [dbo].[Proc_Operation_Log_GetList]

@AppID int,

@UserName nvarchar(50),

@UserIP nvarchar(15),

@PageUrl ntext,

@Type nvarchar(100),

@StartLogTime datetime,

@EndLogTime datetime

 AS

 declare @strWhere varchar(8000)

 declare @minDate datetime

 declare @maxDate datetime

 

 set @strWhere=''

 set @minDate=CAST('1753-01-01' as datetime)

 set @maxDate=CAST('9999-12-31' as datetime)

 

 --数字类型匹配

 if @AppID>0

 begin 

    set @strWhere=@strWhere+' and AppID='+CONVERT(varchar(8000),@AppID)

 end

 

 --字符类型模糊查找

 if @UserName<>''

 begin

    set @strWhere=@strWhere+' and UserName like '+''''+'%'+@UserName+'%'+''''

 end

 

 --字符类型完全匹配

 if @UserIP<>''

 begin

    set @strWhere=@strWhere+' and UserIP='+''''+@UserIP+''''

 end

 

 --@PageUr为ntext类型,必须类型转换否则出现lntext 和varchar 在equal to 运算符中不兼容的问题

 if CONVERT(varchar(8000),@PageUrl)<>''

 begin

    set @strWhere=@strWhere+' and PageUrl like '''+'%'+''+CONVERT(varchar(8000),@PageUrl)+''+'%'''

 end

 

 --日期比较

 if @StartLogTime >@minDate

 begin

     set @strWhere=@strWhere+' and LogTime>=cast('+''''+CONVERT(varchar(100),@StartLogTime,23)+''''+' as datetime) '

 end

 

 if @StartLogTime <@maxDate

 begin

     set @strWhere=@strWhere+' and LogTime<=cast('+''''+CONVERT(varchar(100),@EndLogTime,23) +''''+' as datetime) '

 end

 declare @strMain varchar(8000)

 set @strMain='   SELECT ID,UserID,UserName,UserIP,AppID,AppIP,Type,TypeDesc,PageForm,PageState,ObjectID,ObjectName,ObjectDesc,PageUrl,Result,ResultMsg,LogTime,ServerLogTime

              FROM [Operation_Log]

              WHERE 1=1'+@strWhere

 exec(@strMain)

GO

 

 

 

 

 

 

SQL Server2008存储过程调试 不过,SQL Server 2008存储过程调试功能和SQL2000的方法差别很大  。 1、SQL Server2000存储过程调试 SQL2000是在查询分析器中的对象浏览器中选中需要调试的存储过程,右键----调试---输入参数开始调试  。 2、SQL Server2008存储过程调试      SQL Server2008中则完全不同,变成了必须要在Microsoft S 阅读详情

相关推荐

SQL Server 2008查询性能优化:实践技巧与策略

在当今数据密集型的应用环境中,数据库查询性能对整体系统性能的影响不可忽视。SQL Server 2008作为企业级数据库解决方案的一部分,其查询性能优化对确保应用程序的高响应性和稳定性至关重要。本章首先对SQL Server 2008查询性能优化的目标和挑战进行概述,为读者提供基础背景知识。随着系统复杂性的增加,查询优化已成为一个包含多个层面的技术活动,涉及查询计划的生成、索引的设计与维护、避免全表扫描等多个方面。本章旨在介绍查询性能优化的基本概念和常见策略,为后续章节中的深入讨论奠定基础。

weixin_42620563的博客 797

SQL 存储过程 循环(while,repeat,loop)

【代码】SQL 存储过程 循环(while,repeat,loop)

weixin_63215361的博客 1807

SQL Server 2008编程专业指南实战教程

本文还有配套的精品资源,点击获取 简介:本书深入解析了SQL Server 2008的核心编程技术,为开发者提供了一套完整的指导,从T-SQL语言基础到存储过程和触发器,再到索引优化、安全性、备份恢复,以及数据整合和报表服务。本书包含至少25个章节,全面覆盖了SQL Server 2008的各个方面,帮助读者高效构建稳定、高效和安全的数据库应用程序。 1. SQL S...

weixin_35294091的博客 798

多条件查询,显示分页存储过程

–创建存储过程名 create proc up_PageHouse @Tid int, --需要查询的参数 @Rid int, @Hid int, @Sid int, @Location1 varchar(50), @PageIndex int, --当前页 @PageSize int, --每页显示多少条 @PageCount int out, --返回总行数 @Count int ...

花半仙的博客 376

Python量化交易实战:从零搭建你的第一个多因子选股模型(附完整代码)

本文是一份详细的Python量化交易入门实战指南,手把手教你从零搭建第一个多因子选股模型。内容涵盖环境配置、数据获取、因子挖掘与有效性检验、多因子合成以及完整的策略回测与绩效评估,并附有可直接运行的完整代码,帮助初学者快速掌握量化交易的基本概念与实践流程。

resnet7explorer的博客 935

Modbus 通信协议详解

Modbus是由 Modicon(现为施耐德电气公司的一个品牌)在 1979 年发明的,是全球第一个真正用于工业现场的总线协议。ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给 IDA(,分布式自动化接口)组织,并成立了 Modbus-IDA 组织。

Projectsauron 的博客 7万+

带参数的存储过程执行判断语句进行查询不同的内容

需求,我们要通过传入sql存储过程值,和类别,根据类别进行值的增加或减少等逻辑判断 存储过程如下: -----------------------分隔符 ---创建带参存储过程 --- Calculation_SalarySubsidieChange go if exists(select * from sysobjects where name='Calculation_SalarySub...

milijiangjun的博客 1250

有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算)

最近在帮一个四年生完成她的毕业论文,在用SPSS进行R×C表检验的时候,发现Fisher精确检验的结果无法显示,提示为“由于无法打开临时文件,因此无法进行计算”,大概像下图一样。 (这图是从网上找的) 然...

chuyang37的博客 3万+

SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法...

  本文出处: http://www.cnblogs.com/wy123/p/5958047.html    最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种写法孰优孰劣,该选用那种写法,以及各种写法优缺点,本文以一个简单的查询存储过程为例,简单说一下各种写法的区别,以及该用那种写法专业DBA以及熟悉数据库的同学请无视。   废话不多,...

weixin_33905756的博客 387

【PADS-开发指南】

馒头破戒大师

sinat_23896491的博客 3222

RealSense D435i深度相机实战:从像素坐标到三维空间的精准映射(Python实现)

本文详细介绍了使用RealSense D435i深度相机实现从二维像素坐标到三维空间坐标精准映射的两种Python实战方法:深度图反投影法与点云直接查找法。文章涵盖环境搭建、相机对齐、代码实现、性能对比及与YOLO等检测模型结合的进阶应用,并提供了关键的避坑指南和参数调优建议,帮助开发者在机器人、三维重建等项目中高效应用。

weixin_29291573的博客 382

有关sql server存储过程带 查询带条件 的一些写法

-- use accmain -- 删除表和过程 /**  drop table tb_Server  drop procedure sp_add **/ /** CREATE TABLE  tb_Server(    id int identity(1,1) PRIMARY KEY,    s_wmsccp  nvarchar(200),    s_ip  nvarchar(...

世范水晶 398

ISO21434 组织网络安全管理(二)

为了实现网络安全工程,该组织建立并维护网络安全治理和网络安全文化,包括网络安全意识管理、能力管理和持续改进。这涉及到指定针对本文档的目标进行独立审计的特定于组织的规则和过程。 为了支持网络安全工程,该组织实施了网络安全的管理系统,包括管理工具和应用质量管理系统。

qq_42357877的博客 1322

SQL SERVER2008存储过程加密与解密

前言 我们在设置数据库存储过程时经常会用到加密,如果遇到版本更新需要修改存储过程时,如果设计数据库时的存储过程没有留存,所以就必须用到存储过程的解密了,原来自己有个解密存储过程在SQL2000下应用无问题,后来升级到SQL2008后不好用了,下在我们就介绍一下在SQL2008下存储过程的解密方法。 存储过程的加密 存储过程加密的方法非常简单,我们在设计存储过程时加下WITH ENCRYPTI...

做工作不具体化,想问题就会简单化 8859

基于Simulink的PR(比例谐振)控制器在单相整流中的应用

本文详细介绍了基于Simulink的单相整流系统中PR(比例谐振)控制器的设计与实现方法。首先阐述了PR控制器相较于传统PI控制器的优势,能够有效消除交流信号跟踪中的稳态误差。接着系统讲解了PR控制器的传递函数原理、实用型设计(带带宽)及参数整定方法。通过Simulink建模步骤,包括主功率电路搭建、电压外环PI设计、电流指令生成、PR控制器实现(推荐MATLAB Function方法)和SPWM调制等关键环节。仿真对比显示PR控制在电流跟踪精度(THD仅1.9%)、功率因数(0.998)和动态响应(突变恢

amy_mhd的博客 689

【漏洞复现】爱数云盘 Usrm_GetAllUsers 未授权访问漏洞

爱数 AnyShare存在未授权漏洞,未授权的攻击者可以通过该漏洞获取用户名信息。

qq_67810151的博客 3121

Sql Server 2008 如何调试存储过程

新建查询: use Vline_TimeSheet  ---数据库名称 -----------------声明存储过程中的变量----------------------------- declare @tblName varchar(255), -- 表名 @fldName varchar(255), -- 主键字段名 @PageSize int = 10, -- 页尺寸 @

u010541219的专栏 5995

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SQL SERVER2008存储过程调试

昨天被问到sql server中存储过程怎么调试,我以前写存储过程,调试方法很笨拙,就是逐条执行语句,然后查看结果是不是预期的,这种调试方法,实在是无奈之举,极大程度地限制了开发速度和准确性。今天在他的提点下,研究了下SQL SERVER 2008的存储过程调试。1.在SQL S

Eの懒龙的技术乐园 1527

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SQLServer2008和Oracle10g分页存储过程

一、SQLServer2008 1.1分页存储过程: -- ============================================= -- Author:   -- Create date: -- Description:  -- ============================================= --标量变量,表变量,本地变量 cr

seek24的专栏 1117

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

sql2008存储过程

SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的概念     存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行

wanglei466208743的专栏 2928

sql server 2008分布式查询

在接触公司一个系统时,公司使用的是SQL Server 2008数据库,里面涉及到了多个数据库之间的查询,而且数据库是分布式的,数据库分布在多台服务器之间,并且各个数据库各尽其责,负责存放不同模块功能的数据。这里面就要涉及到了数据库的分布式查询。 补充一下分布式查询的知识: 分布式查询从多异类数据源中访问数据。这些数据源可以存储在同一台计算机或不同的计算机上。Microsoft SQL S

chenqiangdage的专栏 1701

SQL Server 2008下轻松调试T-SQL语句和存储过程

今天突然有同事问起,如何在sqlserver中调试存储过程(我们公司使用的是sqlserver 2008 R2),猛地一看,和以前使用sqlserver 2000真的有很大的不同,我真晕了。 于是琢磨了一下。SQLSERVER 2005中不知因何去掉了很重要的DEBUGGE

丁码农 8万+

sql server2008调试存储过程的完整步骤

sql server2008 存储过程

weixin_43102784的博客 2515
上一篇: sql函数 数字转换成字符串
下一篇: .NET3.5下Asp.net如何异步调用WebService
aspnet2002web
博客等级 码龄21年 482粉丝 310原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值