`
isiqi
  • 浏览: 16337166 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

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

--@PageUrntext类型,必须类型转换否则出现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 Server时自动执行存储过程

    启动 SQL Server 时自动执行存储过程是 SQL Server 中的一项功能,它允许在 SQL Server 启动时自动执行一个或多个存储过程。这些存储过程必须由系统管理员创建,并在 sysadmin 固定服务器角色下作为后台过程执行。 ...

    sql存储过程PPT

    【存储过程】是SQL Server数据库管理系统中的一个重要特性,它类似于编程语言中的函数,可以执行一系列预定义的SQL语句和管理任务。存储过程能够提高系统的效率、安全性,并且支持模块化程序设计,使得代码重用变得...

    sql\(很长的l模糊查询拼接)sql存储过程

    - **多条件查询**:当存在多个查询条件时,可以通过IF语句组合不同的查询逻辑。 - **示例**: ```sql -- 当addDate和name都有值时 IF (@addDate IS NOT NULL) AND (@name &lt;&gt; '') BEGIN SELECT * FROM table ...

    C# sql分页存储过程例子

    本示例将详细阐述如何在C#应用程序中利用SQL Server的存储过程实现分页功能。 首先,我们要了解什么是分页。分页是一种在用户界面上显示大量数据时,将数据分成多个小块(页)的方法,每次只加载一部分数据,而不是...

    sql存储过程

    在信息技术领域,尤其是在数据库管理系统中,SQL存储过程是一项重要技术。其核心价值在于能够让数据库管理员或者开发人员通过编写一段代码来封装一系列数据库操作,使得这些操作可以被重用、简化数据库操作流程,并...

    SQLserver存储过程与触发器.pdf

    存储过程是 SQL Server 服务器上的一组预编译的 Transact-SQL 语句,用于完成某项任务。它可以接受参数、返回状态值和参数值,并且可以嵌套调用。存储过程的类型包括系统存储过程、用户定义存储过程、临时存储过程和...

    编写安全的SQL Server扩展存储过程

    总的来说,编写安全的SQL Server扩展存储过程是一项需要细心和专业知识的任务,涉及内存管理、线程安全、错误处理等多个方面。遵循最佳实践并充分测试,可以确保扩展存储过程在提高数据库功能的同时,维持系统的稳定...

    SQL 中查询过程FLASH 演示

    在“SQL 中查询过程FLASH演示”中,你可能会看到这些概念通过动画或交互式示例的方式生动展现,帮助理解每种查询类型的工作原理和实际应用。通过这样的学习资源,你可以更直观地掌握SQL查询的精髓,提升数据库操作...

    全文搜索存储过程

    本文将深入解析一个特定的全文搜索存储过程,旨在通过关键字及其权重进行精确搜索,这一过程涉及SQL Server的全文搜索功能、存储过程的设计与实现,以及如何优化查询性能。 #### 存储过程设计与实现 存储过程`Proc...

    MSSQL用户表、视图、存储过程转SQL

    总之,将MSSQL的用户表、视图和存储过程转换为SQL脚本是一项关键任务,对于数据库的管理和维护至关重要。通过理解这些概念和利用合适的工具,你可以有效地管理你的MSSQL数据库,并确保其在各种场景下的可移植性。

    SQL SERVER 2008, 一键卸载工具

    SQL Server 2008是一款由Microsoft开发的关系型数据库管理系统,广泛应用于企业级的数据存储、管理和分析。在日常运维工作中,有时需要卸载并重新安装SQL Server 2008来解决各种问题或升级到更高版本。传统的卸载...

    SQLserver2008查询性能优化

    在SQL Server 2008中,查询性能优化是一项至关重要的任务,因为它直接影响到数据库系统的响应时间和整体效率。本文将探讨几个关键的优化策略,尤其是关于索引的创建和管理。 首先,创建有用的索引是提升查询性能的...

    sql_server_2000,2005_存储过程解密过程

    ### SQL Server 2000与2005存储过程解密详解 #### 背景与重要性 在SQL Server 2000及2005版本中,存储过程可以被加密以保护敏感代码免受未授权访问。然而,在某些情况下,如维护、审计或迁移场景中,可能需要对...

    PL/SQL存储过程编程

    ### PL/SQL存储过程编程详解 #### 一、Oracle应用编辑方法概览 在Oracle数据库的应用开发中,存在多种编辑方法和技术,它们各有特点和适用场景。以下是对这些方法的概述: 1. **Pro*C/C++**: 这是一种C语言与...

    sql2008数据查询大全

    ### SQL Server 2008 数据查询大全及基础知识解析 #### 概述 本文档旨在对SQL Server 2008中的数据查询及相关基础知识进行详细总结。这些内容不仅适用于SQL Server 2008,大部分原理和技术也适用于其他版本的SQL ...

    SQL的存储过程

    其中,存储过程是SQL中一项非常重要的功能,它允许用户将一系列SQL命令封装为一个单元,可以进行调用、执行和管理。本文将对SQL的存储过程进行全面深入的介绍,帮助初学者系统地理解和掌握这一关键技术。 #### 存储...

    SQL Server 2008查询性能优化 源代码

    在SQL Server 2008中,查询性能优化是一项至关重要的任务,因为它直接影响到数据库系统的响应速度和整体效率。"SQL Server 2008查询性能优化源代码"这一资源提供了一种深入学习和实践的方法,帮助我们理解并提升SQL...

    sql存储过程解密工具

    SQL存储过程是数据库管理系统中的一种重要编程元素,它是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,可以被多次调用,以提高应用程序的性能。存储过程通常用于复杂的业务逻辑处理,数据验证,或者...

    jsp如何调用sqlserver存储过程

    在JavaServer Pages (JSP) 中调用SQL Server存储过程是一项常见的任务,特别是在构建Web应用程序时需要执行复杂的数据库操作。存储过程是预先编译的SQL语句集合,可以在数据库服务器上执行,提供性能优化和代码复用...

Global site tag (gtag.js) - Google Analytics