返回顶部
首页 > 资讯 > 数据库 >如何理解CASE表达式作用及使用SQLServerCASE 表达式代替动态SQL
  • 286
分享到

如何理解CASE表达式作用及使用SQLServerCASE 表达式代替动态SQL

2024-04-02 19:04:59 286人浏览 独家记忆
摘要

本篇文章为大家展示了如何理解CASE表达式作用及使用sqlServerCASE 表达式代替动态SQL,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  SQLServ

本篇文章为大家展示了如何理解CASE表达式作用及使用sqlServerCASE 表达式代替动态SQL,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

  SQLServerCASE表达式可以代替动态SQL语句,使进行大量更新查询操作时可以提高查询的效率。下面编程网小编来讲解下CASE表达式作用有哪些?如何使用SQLServerCASE表达式代替动态SQL?

  CASE表达式作用有哪些

  CASE语句是一个非常强大而有用的工具,你可以用它来解决你的SQLServer查询问题。你可能已经可以很熟练地在执行SELECT命令的时候使用它来模拟IF/ELSE从句处理。不过,它的功用可远远不限于这类型的处理。

  CASE表达式可以用来:

  用于更新行的时候,避免使用光标回路

  在使用合计函数的时候执行专门的处理

  创建动态ORDERBY和WHERE从句而无需使用动态SQL

  现在让我们来看看一些应用例子:

  首先,新建一个名为Customer的表,插入一些行:

  CREATETABLEdbo.Customer

  (

  customeridINTIDENTITYPRIMARYKEY,

  firstnameVARCHAR(40)NOTNULL,

  lastnameVARCHAR(40)NOTNULL,

  statecodeVARCHAR(2)NOTNULL,

  totalsalesmoneyNOTNULLDEFAULT0.00

  )

  INSERTINTOdbo.Customer(firstname,lastname,statecode,totalsales)

  SELECT'Thomas','Jefferson','VA',100.00

  INSERTINTOdbo.Customer(firstname,lastname,statecode,totalsales)

  SELECT'John','Adams','MA',200.00

  INSERTINTOdbo.Customer(firstname,lastname,statecode,totalsales)

  SELECT'Paul','Revere','MA',300.00

  INSERTINTOdbo.Customer(firstname,lastname,statecode,totalsales)

  SELECT'Ben','Franklin','PA',400.00

  Go

  如何使用SQLServerCASE表达式代替动态SQL

  例一

  现在遇到一个需要向表添加一个状态描述列用于生成所需报表的要求。你当然可以使用指针扫描整个表,达到更新每一行的目的,但是这样做很花时间,降低系统性能表现。你也可以创建多个UPDATE语句,但这样也好不到哪里去。但是,你可以把一个UPDATE语句和CASE结合使用,这样可以只需要一个SET操作就能够高效率地更新整个表。

  ALTERTABLEdbo.CustomerADDstatedescriptionVARCHAR(50)NULL

  GO

  UPDATEdbo.Customer

  SETstateDescription=CASEWHENstatecode='MA'THEN'Massachusetts'

  WHENstatecode='VA'THEN'Virginia'

  WHENstatecode='PA'THEN'Pennsylvania'

  ELSENULL

  END

  例二

  现在我们又接到第二个请求,需要报告所有客户的总数、Massachusetts客户的总数以及所有Massachusetts客户的平均销量。我们当然可以把查询范围限制为Massachusetts客户,但是这样要获得所有客户总数就很麻烦。要解决这个问题,你可以编写一个在合计函数里使用CASE表达的查询,就能够获得Massachusetts客户的信息了:

  SELECTCOUNT(*)ASTotalCustomers,

  SUM(CASEWHENstatecode='MA'THEN1ELSENULLEND)ASTotalMassCustomers,

  AVG(CASEWHENstatecode='MA'THENtotalsalesELSENULLEND)ASTotalMassSales

  FROMdbo.Customer

  因为执行合计函数的时候会忽略NULL值,我们可以轻松获得需要的总数。

  现在又来了新的请求。我们需要一个可以被应用程序调用的存储过程,但是用户希望能够可以通过firstname或lastname来排序。你可能会想要用动态SQL来解决这个问题,不过我们还可以使用CASE来代替动态SQL:

  CREATEPROCEDUREdbo.getCustomerData@sortbyVARCHAR(9),@sortdirectionCHAR(4)

  AS

  SETnocountON

  SELECTcustomerid,firstname,lastname,statecode,statedescription,totalsales

  FROMdbo.Customer

  ORDERBY

  CASE@sortdirection

  WHEN'asc'THEN

  CASE@sortby

  WHEN'firstname'THENfirstname

  WHEN'lastname'THENlastname

  END

  END

  ASC,

  CASE@sortdirection

  WHEN'desc'THEN

  CASE@sortby

  WHEN'firstname'THENfirstname

  WHEN'lastname'THENlastname

  END

  END

  DESC

  GO

  EXECdbo.getCustomerData'lastname','desc'

  例四

  最后一个请求。我们需要修改上述的存储过程来达到通过某个特定状态来查找客户。假如客户状态被省略,则返回所有状态的客户。

  ALTERPROCEDUREdbo.getCustomerData@sortbyVARCHAR(9),@sortdirectionCHAR(4),@statecodeVARCHAR(2)=NULL

  AS

  SETnocountON

  SELECTcustomerid,firstname,lastname,statecode,statedescription,totalsales

  FROMdbo.Customer

  WHEREstatecode=CASEWHEN@statecodeISNOTNULLTHEN@statecode

  ELSEstatecode

  END

  ORDERBY

  CASE@sortdirection

  WHEN'asc'THEN

  CASE@sortby

  WHEN'firstname'THENfirstname

  WHEN'lastname'THENlastname

  END

  END

  ASC,

  CASE@sortdirection

  WHEN'desc'THEN

  CASE@sortby

  WHEN'firstname'THENfirstname

  WHEN'lastname'THENlastname

  END

  END

  DESC

  GO

  EXECdbo.getCustomerData'lastname','desc','MA'

上述内容就是如何理解CASE表达式作用及使用SQLServerCASE 表达式代替动态SQL,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解CASE表达式作用及使用SQLServerCASE 表达式代替动态SQL

本文链接: https://lsjlt.com/news/68048.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解CASE表达式作用及使用SQLServerCASE 表达式代替动态SQL
    本篇文章为大家展示了如何理解CASE表达式作用及使用SQLServerCASE 表达式代替动态SQL,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  SQLServ...
    99+
    2024-04-02
  • SQL 中 CASE 表达式的使用方式
    目录1. 前言2. 语法3. 注意点4. 分类汇总数据5. 一条SQL实现不同条件的统计6. 使用CHECK约束定义多个列的条件关系7. 在UPDATE语句中进行条件分支8. 生成交叉表9. CASE表达式中使用...
    99+
    2024-04-02
  • SQL中CASE表达式的使用方式
    目录1. 前言2. 语法3. 注意点4. 分类汇总数据5. 一条SQL实现不同条件的统计6. 使用CHECK约束定义多个列的条件关系7. 在UPDATE语句中进行条件分支8....
    99+
    2024-04-02
  • MyBatis动态SQL表达式怎么使用
    本篇内容介绍了“MyBatis动态SQL表达式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动态 sql 简单来讲就是我们能通过条件...
    99+
    2023-07-04
  • Mybatis如何使用ognl表达式实现动态sql
    本文讲述在mybatis中如何使用ognl表达式实现动态组装sql语句 新建Users实体类: public class Users { private Integer ...
    99+
    2024-04-02
  • 如何在表达式中使用Mysql SELECT CASE
    在MySQL中,可以使用SELECT CASE语句来根据不同的条件选择不同的值或执行不同的操作。下面是一个示例,展示了如何在...
    99+
    2023-09-26
    Mysql
  • SQL正则表达式及mybatis中使用正则表达式的方法
    小编给大家分享一下SQL正则表达式及mybatis中使用正则表达式的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql...
    99+
    2024-04-02
  • Mybatis怎么使用ognl表达式实现动态sql
    这篇文章主要为大家展示了“Mybatis怎么使用ognl表达式实现动态sql”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mybatis怎么使用ognl表达式实现动态sql”这篇文章吧。新建Us...
    99+
    2023-06-15
  • sql中如何使用正则表达式
    sql中使用正则表达式可通过regexp_like()函数,使用posix语法匹配字符串。常用字符包括锚点字符、字符类和量词。正则表达式可用于在select、where和其他语...
    99+
    2024-05-02
  • 如何正确使用case when表达式 和 decode函数?
    相信很多小伙伴在开发过程中都有用到case when表达式和decode函数,那么会不会有小伙伴和我一样刚开始有很多疑虑,什么情况下用case when,什么情况下用decode呢?两者有什么区别呢...
    99+
    2024-04-02
  • sql server 中如何使用公共表达式
    sql server 中如何使用公共表达式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、前言    现在做项目数据访问基本...
    99+
    2024-04-02
  • 如何使用DW正则表达式批量替换
    小编给大家分享一下如何使用DW正则表达式批量替换,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!想法:想把<a href="#" targ...
    99+
    2023-06-08
  • python如何使用Lambda表达式
    这篇文章主要为大家展示了“python如何使用Lambda表达式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用Lambda表达式”这篇文章吧。Lambda表达式厌倦了定义用不...
    99+
    2023-06-27
  • Java中Lambda表达式使用及详解
    Java中Lambda表达式使用及详解 前言 一、Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加...
    99+
    2023-08-16
    java
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • 在Java中如何使用groovy语言作为动态规则表达式
    小编给大家分享一下在Java中如何使用groovy语言作为动态规则表达式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!由于在工作流设计中需要为条件分支设定条件表达...
    99+
    2023-06-17
  • 如何使用Linq Lambda表达式替换匿名方法
    小编给大家分享一下如何使用Linq Lambda表达式替换匿名方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Linq Lambda表达式Linq Lambda表达式是一种语言功能,在许多方面类似于匿名方法。事实上,如果...
    99+
    2023-06-17
  • 如何使用Python列表推导表达式
    小编给大家分享一下如何使用Python列表推导表达式,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用Python列表推导表达式列表推导表达式是从另一个列表创建列表的一种非常紧凑的方法。 看下面的代码。 第一个是使用简单的...
    99+
    2023-06-27
  • CSS中如何使用expression表达式
    本篇内容介绍了“CSS中如何使用expression表达式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!下...
    99+
    2024-04-02
  • python如何使用三元表达式
    这篇文章主要为大家展示了“python如何使用三元表达式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用三元表达式”这篇文章吧。三元表达式熟悉...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作