当前位置:首页 » 编程语言 » sql动态条件

sql动态条件

发布时间: 2023-09-16 14:07:26

⑴ 动态sql的使用

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

静态SQL

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

动态SQL

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

动态SQL作用

动态SQL执行方法

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

EXEC命令执行

语法

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

不带参数示例

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

EXEC ('SELECT * FROM Customers')

结果如下:

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

带参数示例

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

DECLARE @SQL AS VARCHAR(100);

DECLARE @Column AS VARCHAR(20);

SET @Column = '姓名'

SET @SQL = 'SELECT ' + @Column + ' FROM Customers'

EXEC (@SQL)

结果如下:

SP_EXECUTERSQL执行

语法

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

示例

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

DECLARE @SQL AS NVARCHAR(100);

SET @SQL=N'SELECT * FROM Customers

WHERE 客户ID=@CusID;'

EXEC SP_EXECUTESQL

@STMT=@SQL,

@PARMS=N'@CusID AS INT',

@CusID=1;

结果如下:

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

⑵ 动态实现sql查询条件替换

<select id="queryEmp" resultType="cn.test.entity.Emp">
select * from emp where 1=1
<if test="deptNo!=null">
and deptno=#{deptNO}
</if>
<if test="deptName!=null">
and deptno=#{deptName}
</if>
</select>

注:<if test="deptNo!=null">中 的deptNo是指实体类中的属性或字段;
choose:
<select id="queryEmp" resultType="cn.test.entity.Emp">
select * from emp where 1=1
<choose>
<when test="deptNo!=null">
and deptno=#{deptNo}
</when>
<when test="deptName!=null">
and deptname=#{deptName}
</when>
<otherwise>
and personnum>#{personNum}
</otherwise>
</choose>
</select>

热点内容
安卓wifi路由器在哪里看 发布:2025-03-10 15:47:09 浏览:268
id密码怎么设置密码 发布:2025-03-10 15:26:02 浏览:88
linux打开终端怎么更改配置文件 发布:2025-03-10 15:17:38 浏览:319
抽象接口php 发布:2025-03-10 15:09:14 浏览:805
tomcat配置ip地址访问 发布:2025-03-10 14:54:54 浏览:689
注册淘宝密码多少 发布:2025-03-10 14:49:03 浏览:558
文件上传设备 发布:2025-03-10 14:47:47 浏览:498
江西l2tp服务器托管云服务器 发布:2025-03-10 14:47:38 浏览:886
微信如何给钱包设置手势密码 发布:2025-03-10 14:46:55 浏览:229
江苏服务器如何 发布:2025-03-10 14:46:17 浏览:180