存储过程

高效分页存储过程

做~自己de王妃 提交于 2020-02-15 10:42:00
该存储过程直接复制执行即可 1 4 CREATE PROCEDURE SP_Page 5 @tblName VARCHAR(1255), -- 表名 6 @fldName VARCHAR(1255), -- 主键字段名 7 @PageSize INT = 10, -- 页尺寸 8 @PageIndex INT = 1, -- 页码 9 @IsReCount BIT = 0, -- 返回记录总数, 非 0 值则返回 10 @OrderType BIT = 0, -- 设置排序类型, 非 0 值则降序 11 @strWhere VARCHAR(MAX) = '', -- 查询条件 (注意: 不要加 where) 12 @Recount BIGINT OUTPUT, -- 返回记录总数 13 @PageCount BIGINT OUTPUT -- 返回总页数 14 AS 15 16 DECLARE @strSQL VARCHAR(MAX) -- 主语句 17 DECLARE @strTotal VARCHAR(2000) -- 获取记录数合计语句 18 DECLARE @strTmp VARCHAR(MAX) -- 临时变量 19 DECLARE @strOrder VARCHAR(400) -- 排序类型 20 DECLARE @Sql1 NVARCHAR(MAX) --

mysql 过程和函数的使用方法

爱⌒轻易说出口 提交于 2020-02-15 08:55:16
两者区别: 存储函数必须有返回值,且仅返回一个结果值 存储过程可以没有返回值,但是能返回结果集(out,inout) 存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。 一、过程 CREATE DEFINER = ` root ` @`localhost` PROCEDURE ` NewProc2 ` ( IN ` mydate ` datetime , OUT ` strDate ` varchar ( 50 ) ) BEGIN SELECT DATE_FORMAT ( mydate , '%y年%m月%d日' ) INTO strDate ; END 执行: CALL NewProc2 ( now ( ) , @str ) ; SELECT @str ; 二.函数 CREATE DEFINER = ` root ` @`localhost` PROCEDURE ` NewProc3 ` ( IN ` num ` int ) BEGIN DECLARE number INT DEFAULT 1 ; WHILE number < num DO INSERT INTO tab

事务与存储过程

Deadly 提交于 2020-02-14 14:03:01
事务管理 事务是针对数据库的一组操作,它可以由一条或多条SQL语句组成 【注意:事务中的语句要么都执行,要么都不执行】 先创建一个表 开启事务 START TRANSACTION; 提交事务并查看 COMMIT; 当用户确认提交后,事务中的操作才会执行成功,这个过程就是手动提交的过程 直接查看 退出数据库再查看 事务的四大特性 1.原子性:是指一个事务必须被视为一个不可分割的最小工作单元。只有事务中所有的数据库操作都执行成功,才算整个事务执行成功,任何一个SQL语句执行失败,都会退回到执行事务前的状态。 2.一致性:是指事务将数据库从一种状态转变为下一种一致的状态。例如,在表中有一个字段具有唯一约束,但事务对其进行了修改,使其变得不唯一了,这就破坏了事务的一致性要求,如果事务中的某个动作失败了,系统可以自动撤销事务,返回初始化的状态。 3.隔离性:还可以称为并发控制、可串行化、锁等,当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 4.持久性:事务一旦提交,其所做的修改就会永久保存到数据库中,即使数据库发生故障也不应该对其有任何影响。需要注意的是,事务的持久性不能做到100%的持久,只能从事务本身的角度来保证永久性,而一些外部原因导致数据库发生故障,如硬盘损坏,那么所有提交的数据可能都会丢失。 回滚事务

存储过程编写经验和优化措施

孤街醉人 提交于 2020-02-14 12:27:43
一、介绍: 在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经过优化过的SP要比一个性能差的SP的效率甚至高几百倍。     二、内容:     1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。     2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。     3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点:      a)SQL的使用规范:    i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。    ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。    iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标

MySQL 存储过程 详解

不打扰是莪最后的温柔 提交于 2020-02-14 01:48:38
什么是 MySQL 存储例程? 存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令。 为什么要使用 MySQL 存储过程? 我们都知道应用程序分为两种,一种是基于web,一种是基于桌面,他们都和数据库进行交互来完成数据的存取工作。假设现在有一种应用程序包含了这两 种,现在要修改其中的一个查询sql语句,那么我们可能要同时修改他们中对应的查询sql语句,当我们的应用程序很庞大很复杂的时候问题就出现这,不易维护!另外把sql查询语句放在我们的web程序或桌面中很容易遭到sql注入的破坏。而存储例程正好可以帮我们解决这些问题。 基本语法 声明语句结束符,用于区分; DELIMITER // 声明存储过程CREATE PROCEDURE demo_in_parameter(IN p_in int) 存储过程开始和结束符号 BEGIN .... END 变量赋值 SET @p_in=1 变量定义 DECLARE l_int int unsigned default 4000000; 存储过程简单示例: DELIMITER // CREATE PROCEDURE proc1(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM user; END // DELIMITER ; 注: (1)这里需要注意的是

存储过程编写经验和优化措施

半腔热情 提交于 2020-02-13 23:24:18
在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经过优化过的SP要比一个性能差的SP的效率甚至高几百倍。 内容: 1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。 2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。 3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: a) SQL的使用规范: i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。 ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。 iii.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。 iv. 注意where字句写法

Entity Framework 4.1 and Poco 使用存储过程联表查询

岁酱吖の 提交于 2020-02-13 23:22:06
一:数据库支持 为了演示本例,我们创建了另外一个简单的示例数据库MiniNW,该数据库来自于 ADO.NET Entity Framework Extensions ,但在本例中,我们不会使用这个针对EF的扩展框架,因为它对POCO的支持不好,同时它也不支持DbContext,简单的说来就是它目前不支持EF4.1。 MiniNW可以在本示例代码的如下位置获得: 数据库对应关系如下(由于数据库相对简单,所以直接列出数据,从数据可以直观看出两表的关系): 二:生成POCO及DbContext 我们使用Entity Framework Power Tools CTP生成POCO及相关映射,如果你对此不熟悉,可参考本篇《 使用Entity Framework和WCF Ria Services开发SilverLight之3:Map 》。 三:主表从表数据一起关联查询 数据库中存在存储过程GetCategory: ALTER proc [dbo].[GetCategory] @cid int as begin select * from Categories where @cid = cid end 执行此存储过程的代码如下: public IEnumerable<Category> GetCategoryWithProductsWithID(int id) { var parameter =

通用存储过程定义

允我心安 提交于 2020-02-13 19:35:38
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using Model; using Model.DTO; using System.Data; using DB; using Newtonsoft.Json; namespace DAL { public class PageCommon { public static PageList<T> StoredList<T>(ParaModel model) { string sql = "up_CommodityFy"; SqlParameter[] pars = new SqlParameter[7]; pars[0] = new SqlParameter("@tableName", model.TableName); pars[1] = new SqlParameter("@indexCol", model.IndexCOl); pars[2] = new SqlParameter("@pageSize", model.PageSize); pars[3] = new

mssql(sqlserver)执行系统命令

佐手、 提交于 2020-02-13 01:57:09
原理 利用xp_cmdshell扩展存储过程,此存储过程可以直接执行系统命令 开启xp_cmdshell扩展存储过程 ?id=1;use master;exec sp_configure ‘show advanced options’,1;reconfigure;exec sp_configure ‘xp_cmdshell’,1;reconfigure; 执行系统命令 ?id=1;use master;exec master…xp_cmdshell “whoami”; 之后whoami处替换命令即可 检测是否执行成功 在dnslog上获取一个dns,执行ping -n 1 tmggvw.dnslog.cn 之后去dnslog上查看,发现有ping请求,说明执行成功 来源: CSDN 作者: 卖N孩的X火柴 链接: https://blog.csdn.net/wsnbbz/article/details/104286664

带有like的存储过程

主宰稳场 提交于 2020-02-12 00:04:53
ALTER PROCEDURE dbo.getinfobycontent @pageindex int, @pagenum int, @content nvarchar(50), @recordcount int output AS select top (@pagenum) * from eq_info where infocontent like '%'+@content+'%' and infoid not in (select top (@pagenum*(@pageindex-1)) infoid from eq_info where infocontent like '%'+@content+'%') select @recordcount =count(infoid) from eq_info where infocontent like '%'+@content+'%' RETURN @@ROWCOUNT:返回受上一语句影响的行数,任何不返回行的语句将该变量设为0; 局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的); 申明局部变量语法:declare @变量名 数据类型;例如:declare @num int; 赋值:有两种方法式(@num为变量名,value为值) set @num=value; 或 select @num=value;