[转][SQL]如何实现存储过程中动态加入条件---没想到语句可以这么巧妙

在存储过程过程中,如果要实现Select查询的where子句动态查询,可以用exec ( "select .... where" [email protected])这样的方式。但这样的话,感觉用存储过程就没什么用了,因为存储过程最大的特点就是将代码编译了放在DBMS中,而调用exec的话,这一部分就无法编译,也就无从优化了。下面是一个比较巧妙的方法去实现所谓的“动态查询”select * from table1 where     a = 1     and ((@id IS NULL) or ([email protected]) or (@id=‘‘))@id是传入的参数,如果◎id的值是null的话,那么and后面一整块是false,可以忽略,而如果不为null的话,实际上等于where a=1 and [email protected]如果要启用id作为查询条件,就传入一个非null的值,否则就是不启用id作为查询条件,这就是传说中的动态查询

[转][SQL]如何实现存储过程中动态加入条件---没想到语句可以这么巧妙

时间: 2024-10-10 05:11:21

[转][SQL]如何实现存储过程中动态加入条件---没想到语句可以这么巧妙的相关文章

SQL 检索所有存储过程中是否包含某字符

--将text替换成你要查找的内容 select name from sysobjects o, syscomments s where o.id = s.id and text like '%text%' and o.xtype = 'P' --将text替换成你要查找的内容 SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%text%

如何查看存储过程中动态生成的sql

今天在工作中遇到那么一个需求,要查看存储过程中生成的sql,以便和实际的业务需求核对. 经过多方查询,想到如下办法: 1.在存储过程中凡是涉及到execute immediate mysql的地方,加上DBMS_OUTPUT.PUT_LINE(mysql);同时为了减少运行时间将execute immediate mysql注释. 2.如果因为mysql字符过长,报string buffer is too small,那么采用另外一种方式,事先定义v_pos Number := 1;然后通过以下

SQL Server:存储过程中编写事务处理的方法小结

/**8. SQLServer存储过程中编写事务处理的方法小结**/ 原文出处: http://www.jb51.net/article/80636.htm 本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码. 1. 常见写法: 在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 ... update statement 2 ... delete statement 3 ... c

在 SQL Server 的存储过程中调用 Web 服务

介绍 一个老朋友计划开发一个应用,基于 .NET 和 Socket,但需要在存储过程中调用 Web 服务. 在这篇文章中我们将分享这个应用的经验,讲述如何在存储过程中调用 Web 服务,并传递参数. Step 1 首先我们在 Visual Studio 中创建一个 Web 服务项目: Step 2 接下来在服务中添加我们需要的方法,在这里我们创建 6 个方法,分别是 Greet (string Param1) ,HelloWord() , Add, subtract, 和 Divide (Num

存储过程中动态执行SQL并获取返回结果

很久没有写存储过程了,因为存储过程违背OOP精神,话说带了参数的存储过程,如果业务需求改变,改存储过程还真的挺麻烦的.所以现在比较倾向于负责的业务逻辑在业务层去处理,业务层专门做业务层的事情. 通过一层巧妙地包装,动态执行SQL语句就解决了 ALTER procedure [dbo].[PROC_NextSteps] ( @Count int, @IDS NVARCHAR(500), @Rules NVARCHAR(MAX), @IDSOut NVARCHAR(500) OUT ) as BEG

SQL Server数据库存储过程中拼接字符串注意的问题

在SQL Server数据库中书写复杂的存储过程时,一般的做法是拼接字符串,最后使用EXEC sp_executesql '拼接的字符串' 查询出结果. 先看一段代码: 1 -- ============================================= 2 -- Author: XXX 3 -- Create date: 2014-09-19 4 -- Description: 获取学生列表信息 5 -- ====================================

sql在所有存储过程中查询包含某字符串的执行语句

直接在查询分析器中执行以下代码就行: 方法一) select name from sysobjects o, syscomments s where o.id = s.id and text like '%aaaabbbb%' and o.xtype = 'P' 方法二) SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%aaaabbbb

SQL中in参数在存储过程中传递及使用的方法

背景: 1.使用存储过程 2.存储过程中有in 3.in括号里面的内容作为参数传递 解决方案: 1.直接拼接sql 可在存储过程中拼接字符串,然后执行此字符串,类似于js中的eval PROCEDURE [dbo].[INSelect] @P_0 NVARCHAR(600) AS DECLARE @A VARCHAR(6000) SET @A='SELECT * FROM testTb WHERE zip IN ('[email protected]_0+')' 然后用系统存储过程sp_exec

在oracle存储过程中创建临时表

在oracle的存储过程中,不能直接使用DDL语句,比如create.alter.drop.truncate等. 那如果我们想在存储过程中建立一张临时表就只能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建临时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number