存储过程

利用SQL未公开的存储过程实现分页

时光怂恿深爱的人放手 提交于 2020-03-04 03:39:28
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_splitpage]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_splitpage] GO --利用SQL未公开的存储过程实现分页 create procedure p_splitpage @sql nvarchar(4000), --要执行的sql语句 @currentpage int=2, --要显示的页码 @pagesize int=10, --每页的大小 @recordcount int=0 out, --记录数 @pagecount int=0 out --总页数 as set nocount on declare @p1 int exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output select @recordcount=@pagecount,@pagecount=ceiling(1.0*@pagecount/@pagesize) ,@currentpage=(@currentpage-1)*@pagesize+1

Oracle--集合的存储过程测试

心已入冬 提交于 2020-03-03 21:53:05
例: DECLARE TEST2_TAB cust_limit_tab := cust_limit_tab(); --必须要初始化一个空TAB,否则报错未初始化 TEST2_ROW cust_limit_row; a VARCHAR2(30); b VARCHAR2(30); BEGIN TEST2_TAB.EXTEND; --初始化后,里面是没有下标的,需要添加下标;不加则报错 TEST2_TAB(1) := cust_limit_row('GGKH','TEST1','1'); CUST.M_CUST_LIMIT_CONFIG.EMP_OPERA_LIMIT_CONFIG_ADD( 'E1002685', 'A535D510027A4EDEB3DB3CD33B14E92F', TEST2_TAB, a, b ); dbms_output.put_line(a||b); END; ================================ 错误写法 DECLARE loc_tab cust_limit_tab; BEGIN --loc_tab :=cust_limit_tab(); --loc_tab.extend; --loc_tab( 1 ).PRIV_R_NO := '1807101403354028'; --loc_tab( 1 ).CUS_TYPE :=

存储过程间XML参数传递的实例

情到浓时终转凉″ 提交于 2020-03-03 18:33:40
--测试数据准备 Create table Product (ProductID varchar(18),cName varchar(50)) insert into Product Select '80100212800','A' insert into Product Select '80100250006','B' insert into Product Select '80101038000','C' -- 测试执行 Exec ProductGet --- 第一层代码 Alter PROCEDURE ProductGet AS Begin Declare @sql as nvarchar(max) Declare @cXML as XML Declare @cXML1 as XML Declare @cXML2 as XML Declare @cXML3 as XML Exec ProductOne '80100212800',@cXML1 Out Exec ProductOne '80100250006',@cXML2 Out Exec ProductOne '80101038000',@cXML3 Out --Set @cXML1 = @cXML1 + @cXML2 + @cXML3 Declare @cXML_ as XML Set @cXML_ = (Select

sqlserver 分页

我的梦境 提交于 2020-03-03 14:02:06
参考资料:SQL分页语句 第一种方法:效率最高 ? 1 2 3 4 5 6 7 8 9 10 11 SELECT TOP 页大小 * FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY id) AS RowNumber,* FROM table1 ) as temp WHERE RowNumber > 页大小*(页数-1) ORDER BY id --注解:首先利用Row_number()为table1表的每一行添加一个行号,给行号这一列取名'RowNumber' 在over()方法中将'RowNumber'做了升序排列 --然后将'RowNumber'列 与table1表的所有列 形成一个表A --重点在where条件。假如当前页(currentPage)是第2页,每页显示10个数据(pageSzie)。那么第一页的数据就是第11-20条 --所以为了显示第二页的数据,即显示第11-20条数据,那么就让RowNumber大于 10*(2-1) 即:页大小*(当前页-1) 将上面的方法写成存储过程 (表名Location) ? 1 2 3 4 5 6 7 8 9 if(exists( select * from sys.procedures where name = 'p_location_paging' )) --如果p_location

mysql-存储过程

假如想象 提交于 2020-03-03 06:39:32
存储过程和函数 含义:一组预先编译好的SQL语句集合 好处: 1、提高代码的重用性 2、简化操作 2、减少编译次数和与数据库服务器得到连接次数,提高效率 一、创建语法 CREATE PROCEDURE 存储过程名称(参数列表) BEGIN 存储过程体(一组合法的SQL语句) END 注意: 1、参数列表包含三部分 参数模式 参数名 参数类型 例如:IN stuname VARCHAR(20) 参数模式 : IN:所修饰参数可作为输入,也就是该参数需要调用方传入 OUT:所修饰参数作为输出,也就是该参数可作为返回值 INOUT:所修饰参数既可以作为输入又可以作为输出,也就是需要传入值,有可以返回 2、如果存储过程体仅仅只有一句话,BEGIN END 可以省略 -存储过程体中的每条SQL语句结尾必须加分号 -存储过程的结尾可以使用DELIMITER重新设置 语法:DELIMITER 结束标记 -如:DELIMITER $ 二、调用语法 CALL 存储过程名(实参列表); USE girls; 示例: # 1、【空参列表】案例:插入到admin表中五条记录 以下语句在CMD中执行 SELECT * FROM admin ; DELIMITER $ CREATE PROCEDURE myp1 ( ) BEGIN INSERT INTO admin ( username , PASSWORD

GridView自定义分页存储过程

自古美人都是妖i 提交于 2020-03-02 18:09:24
要做一个GridView分页的应用,可以前用惯了Sql2005的CET,现在开发的项目用的却是Sql2000。CET用不了了只好写了一个临时表的存储过程。用存储过程实现GridView分页效果总体分为两大块:一个是存储过程,另一个就是自定义的按钮控件。下面是详细代码。 第一 存储过程 存储过程1:从数据库取得要查询记录的总条数 CREATE procedure P_PageSP_TotalNum @Sql varchar ( 2000 ), @FilterStr varchar ( 500 ) as declare @Str varchar ( 2000 ) set @Str = ' declare @indextable table(id int identity(1,1),nid int); insert into @indextable(nid) select [ID] from ( ' + @Sql + ' ' + @FilterStr + ' ) as a ; select count(*) from @indextable ' exec ( @Str ) GO 存储过程2:按页取数据 CREATE procedure P_PageSP @Lower varchar ( 4 ), -- 要查询的下限 @Upper varchar ( 4 ), -- 要查询的上限

MySQL存储过程中的3种循环

梦想的初衷 提交于 2020-03-02 04:58:00
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环。还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了。 这几个循环语句的格式如下: WHILE……DO……END WHILE REPEAT……UNTIL END REPEAT LOOP……END LOOP GOTO。 下面首先使用第一种循环编写一个例子。 mysql> create procedure pro10() -> begin -> declare i int; -> set i=0; -> while i<5 do -> insert into t1(filed) values(i); -> set i=i+1; -> end while; -> end;// Query OK, 0 rows affected (0.00 sec) 在这个例子中,INSERT和SET语句在WHILE和END WHILE之间,当变量i大于等于5的时候就退出循环。使用set i=0;语句是为了防止一个常见的错误,如果没有初始化,i默认变量值为NULL,而NULL和任何值操作的结果都是NULL。 执行一下这个存储过程并产看一下执行结果: mysql> delete from t1// Query OK, 0 rows affected (0

mysql详解

佐手、 提交于 2020-03-01 11:59:43
mysql命令 mysql登录参数: -D, --database 指定数据库 --delimiter 指定分隔符 -h, --host 指定服务器地址 -p, --password 指定密码 -P, --port 指定端口 --prompt 设置提示符 -u, --user 指定用户名 -V, --version 输出版本信息并退出 修改命令提示符: 通过参数指定提示符, mysql -uroot -p123456 --prompt 提示符 通过命令指定提示符, mysql> prompt 提示符; 提示符: \D 完整的日期 \d 当前数据库 \h 服务器名称 \u 当前数据库 常用命令: SELECT VERSION(); 显示当前服务器版本 SELECT NOW(); 显示当前日期时间 SELECT USER(); 显示当前用户 mysql语句规范: 1. 关键字与函数名称全部大写 2. 数据库名称、表名称、字段名称全部小写 3. SQL语句必须以分号结尾 操作数据库 CREATE DATABASE 创建数据库 ALTER DATABASE 修改数据库 DROP DATABASE 删除数据库 创建数据库: {} 为必选项; | 表示或; [] 为可选项。下同 CREATE { DATABASE | SCHEMA } [ IF NOT EXISTS ] db_name [

存储过程中执行动态sql语句

一曲冷凌霜 提交于 2020-02-29 15:06:50
存储过程中执行动态sql语句 MSSQL提供了两种方式:exec和sp_executesql 通常后者更有优势,提供了输入输出接口,而exec没有 sp_executesql的最大优点是能够重用执行计划,大大提高了执行性能,所以尽量使用sp_executesql,它也更灵活 1 exec的使用 exec有两种用法:执行一个存储过程,另一种是执行一个动态的批处理 EXEC括号中只允许包含一个字符串变量,但是可以串联多个变量,例如: XEC('SELECT TOP('+ CAST(@TopCount AS VARCHAR(10)) +')* FROM '+           QUOTENAME(@TableName) +' ORDER BY ORDERID DESC'); 这样编译器会报错,编译不通过 但可以这样:EXEC(@sql+@sql2+@sql3);编译就会通过 最好的办法就是把代码构造到一个变量中,然后再把该变量作为exec命名的输入参数 exec的缺点是不能执行一个包含一个带有变量的批处理 例如: DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@OrderID INT; SET @TableName = 'Orders'; SET @OrderID = 10251; SET @sql = 'SELECT * FROM

自己写的通用分页存储过程

二次信任 提交于 2020-02-28 18:34:13
  新手一个,写的最简单的存储过程分页,上代码吧,还请大神们多多调教!    1 USE [BMS] 2 GO 3 /****** Object: StoredProcedure [dbo].[Pages] Script Date: 12/21/2015 11:48:57 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 ALTER PROCEDURE [dbo].[Pages] 9 @page int, --当前页 10 @rows int, --每页显示行数 11 @sidx varchar(50), --排序字段 12 @sord varchar(10), --排序规则 13 @tablename varchar(50), --表名 14 @where varchar(200), --查询条件 15 @id varchar(50) --表的主键字段名 16 AS 17 declare @sqlstr varchar(500) --拼接sql语句 18 BEGIN 19 SET NOCOUNT ON; 20 set @sqlstr='select top '+CAST(@rows AS varchar)+' * from '+@tablename+' where 1=1 '+@where 21