首页 > 数据库 >动态SQL与静态SQL使用场景

动态SQL与静态SQL使用场景

时间:2023-03-01 14:35:19浏览次数:29  
标签:语句 场景 StaffName 静态 应用程序 StaffId SQL

静态SQL 和动态SQL 的区别

静态SQL(或嵌入式SQL) 是应用程序中的 SQL 语句,它们在运行时不会更改,因此可以硬编码到应用程序中。
动态 SQL是在运行时构造的 SQL 语句;例如,应用程序可能允许用户输入他们自己的查询。

静在静态 SQL中

  1. 如何访问数据库是在嵌入式 SQL 语句中预先确定的
  2. 它更加迅速和高效SQL 语句是在编译时编译的
  3. SQL 语句在运行时编译。应用程序计划的解析、验证、优化和生成在编译时完成,一般用于数据分布均匀的情况
  4. 不使用EXECUTE IMMEDIATE、EXECUTE和PREPARE语句
  5. 它不太灵活。

在动态 SQL 中

  1. 如何访问数据库是在运行时确定的,它不那么迅速和高效
  2. 应用程序计划的解析、验证、优化和生成在运行时完成
  3. 它通常用于数据分布不均匀的情况。
  4. 使用EXECUTE IMMEDIATE、EXECUTE和PREPARE语句
  5. 它更灵活。

先说涉及到的场景
如果客户填了查询信息,则查询该条件;如果客户没填,则返回所有数据。

动态SQL,将查询条件中的判断语句,提前在代码中判断完成,从而放到数据库中(如SQL Server),而且是简单的,可利用索引的SQL语句。

真实案例:(Dapper)

 public override string GetSelectSql()
    {
        return $"select s.StaffId,s.StaffName {GetPageSelectTotalSql()}";
    }

    public override string GetPageSelectTotalSql()
    {
        return "from LrStaffAreaConfig s where 1=1";
    }
    protected override void ResolveCondition()
    {
        if (!string.IsNullOrWhiteSpace(StaffName))
        {
            AddWhere(@"and s.StaffName = @StaffName", "StaffName", StaffName);
        } 
        if (!string.IsNullOrWhiteSpace(StaffId))
        {
            AddWhere("and s.StaffId = @StaffId", "StaffId", StaffId);
        }
    }

(请忽略一些封装的方法,代码只作为展示)
相比于静态SQL提高了性能避免导致一些情况下无法使用索引。

我是以一名实习生的视野来写文章的(因为我本人确实也是哈哈)所以有什么不对的地方还请指正。

参考的文章https://www.cnblogs.com/sdflysha/p/20191221-why-dynamic-sql.html

标签:语句,场景,StaffName,静态,应用程序,StaffId,SQL
From: https://www.cnblogs.com/EsonLiu/p/17168055.html

相关文章

  • OpenMLDB SQL 与标准 SQL 的主要差异
    本文将OpenMLDBSQL的主要使用方式(SELECT查询语句)与标准SQL(以MySQL支持的语法为例)进行比较,让有SQL使用经验的开发者快速上手OpenMLDBSQL。面向OpenMLDB版本:>......
  • PostgreSQL 主从搭建
    PostgreSQL体系结构本地内存本地内存是服务器进程独占的内存结构,每个postgresql子进程都会分配一小块相应内存空间,随着连接会话的增加而增加,它不属于实例的一部分work_mem:用......
  • MySQL数据库架构&SQL注入漏洞
    查找zblog数据库中有哪些表SELECTTABLE_SCHEMA,TABLE_NAMEFROMinformation_schema.`TABLES`WHERETABLE_SCHEMA='zblog';查找目标表(zbp_category)中的字段SELECT6,COLU......
  • 非交互式连接PostgreSQL
    方法一:.pgpass查看postgres家目录greppostgres/etc/passwdpostgres:x:114:119:PostgreSQLadministrator,,,:/var/lib/postgresql:/bin/bash创建.pgpasstouch/var/......
  • ubuntu20.04二进制部署PostgreSQL 15.2
    创建文件存储库配置echo"debhttp://apt.postgresql.org/pub/repos/apt$(lsb_release-cs)-pgdgmain">/etc/apt/sources.list.d/pgdg.list导入存储库签名密钥wget......
  • 面试官:怎么设计大文件、大数据场景下的传输加密方案?
    某年某月某一天,冷冽寒风中,姚小毛走进了某家公司,开始了新一轮的面试。一阵寒暄后。面试官:“你好,看你的项目经验中有做过数据加密的工作,你是使用什么加密算法加解密的?”......
  • 国产计算机开发实践之环境搭建(Java+Mysql+Idea)
    操作系统:统信UOS/麒麟架构:aarch64(命令行uname-m查看)一、Java1.解压安装包(注:在安装包所在路径下输入命令)sudotar-zxvfjdk-8u271-linux-aarch64.tar.gz-C/usr/loca......
  • yum卸载mysql
    查找mysql安装的文件:rpm-qa|grep-imysql卸载查找出的文件:yumremove"文件名"查看是否卸载完成:rpm-qa|grep-imysql查找mysql相......
  • MySQL 查询常用操作(0) —— 查询语句的执行顺序
    MySQL中明确查询语句的执行顺序极其重要,了解执行顺序才不至于犯一些简单错误,例如having后面是否可以使用select中重命名的列名等问题。另外SQL中实际使用最频繁的就是查......
  • 利用python操作数据库MySQL
    一、python操作MySQL的库(包)1.PythonDatabasAPI   Python操作数据库的标准接口为PythonDatabasAPISpecificationV2.0,其定义了在python中操作数据库的方法......