SQL高级知识V2——动态SQL

简介: 在介绍动态SQL前我们先看看什么是静态SQL

静态SQL

静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的。静态 SQL 语句的编译是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时,数据库将直接执行编译好的 SQL 语句,降低运行时的开销。


动态SQL

动态 SQL 语句是在应用程序运行时被编译和执行的,例如,使用 DB2 的交互式工具 CLP 访问数据库时,用户输入的 SQL 语句是不确定的,因此 SQL 语句只能被动态地编译。动态 SQL 的应用较多,常见的 CLI 和 JDBC 应用程序都使用动态 SQL。


动态SQL作用

  • 自动化管理任务。例如:对于数据库实例中的每个数据库,查询其元数据,为其执行BACKUP DATABASE语句。
  • 改善特定任务的性能。例如,构造参数化的特定查询,以重用以前缓存过的执行计划。
  • 对实际数据进行查询的基础上,构造代码元素。例如,当事先不知道再PIVOT运算符的IN子句中应该出现哪些元素时,动态构造PIVOT查询。


动态SQL执行方法

使用EXEC(EXECUTE的缩写)命令和使用SP_EXECUTERSQL。


EXEC命令执行

语法

EXECUTE (SQL语句)

注:EXECUTE 命令有两个用途,一个是用来执行存储过程,另一个是执行动态SQL


不带参数示例

在变量@SQL中保存了一个字符串,该字符串中包含一条查询语句,再用EXEC调用保存在变量中的批处理代码,我们可以这样写SQL:

    EXEC ('SELECT * FROM Customers')

    结果如下:

    11.jpg

    与我们直接执行SELECT * FROM Customers一样。


    带参数示例

    还是上面的示例,我们换一种写法

    12.png

    结果如下:

    13.jpg

    SP_EXECUTERSQL执行

    语法

    EXEC SP_EXECUTERSQL  参数1,参数2,参数3


    注意:SP_EXECUTERSQL是继EXEC后另一种执行动态SQL的方法。使用这个存储过程更加安全和灵活,因为它支持输入和输出参数。注意的是,与EXEC不同的是,SP_EXECUTERSQL只支持使用Unicode字符串作为其输入的批处理代码。


    示例

    构造了一个对Customers表进行查询的批处理代码,在其查询过滤条件中使用一个输入参数@CusID

    14.png

    结果如下:

    15.jpg


    代码中将输入参数取值指定为1,但即使采用不同的值在运行这段代码,代码字符串仍然保存相同。这样就可以增加重用以前缓存过的执行计划的机会。


    批注

    动态SQL在日常工作中可能接触的比较少,但是其功能是非常强大的,可以直接嵌套在代码里进行操作数据,但是也很容易出错,特别是在进行命令拼接时候要非常仔细。这里只是给大家简单介绍一下其使用方法,需要深入使用还需要多多研究。


    相关文章
    |
    4月前
    |
    SQL
    SQL 的 AND、OR 和 NOT 运算符:条件筛选的高级用法
    SQL的AND运算符用于根据多个条件筛选记录,确保所有条件都为TRUE才返回记录。下面是AND运算符的基本语法:
    50 1
    |
    1月前
    |
    SQL 存储 数据可视化
    10个高级的 SQL 查询技巧
    10个高级的 SQL 查询技巧
    |
    3月前
    |
    SQL Oracle 关系型数据库
    整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
    整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
    87 0
    |
    30天前
    |
    SQL Java 关系型数据库
    MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
    MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
    16 0
    |
    30天前
    |
    SQL Java 关系型数据库
    MyBatis中的9种常用动态sql标签精妙用法
    MyBatis中的9种常用动态sql标签精妙用法
    47 0
    |
    1月前
    |
    SQL druid Java
    【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
    【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
    29 0
    |
    2月前
    |
    SQL XML Java
    【JavaEE进阶】 MyBatis之动态SQL
    【JavaEE进阶】 MyBatis之动态SQL
    |
    3月前
    |
    SQL 缓存 Java
    JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
    JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
    62 0
    JAVAEE框架技术之8-myBatis ORM框架技术参数和动态SQL语句
    |
    3月前
    |
    SQL XML Java
    【MyBatis】动态SQL
    【MyBatis】动态SQL
    |
    3月前
    |
    SQL XML Java
    MyBatis 实现动态 SQL
     MyBatis 中的动态 SQL 就是SQL语句可以根据不同的情况情况来拼接不同的sql。 本文会介绍 xml 和 注解 两种方式的动态SQL实现方式。
    71 1