存储过程

Jun 07, 2016 pm 03:58 PM
sql 存储 数据库 程序 过程 连接

以前做《机房收费系统》时,和数据库连接的T—SQL程序都保存在本地,通过一段时间对数据库的学习后了解到数据库中的存储过程也可以完成相同的操作,且其创建的T—SQL程序保存在SQL Server中。它在服务器端对数据库中的数据进行处理,并将结果返回到客户端。

以前做《机房收费系统》时,和数据库连接的T—SQL程序都保存在本地,通过一段时间对数据库的学习后了解到数据库中的存储过程也可以完成相同的操作,且其创建的T—SQL程序保存在SQL Server中。它在服务器端对数据库中的数据进行处理,并将结果返回到客户端。这样就避免了从客户端多次连接并访问数据库的操作,从而提高客户端的工作效率。

1.存储过程的使用

存储过程是集中存储在SQLServer中的SQL语句和流程控制语句的预编译集合,用以实现某种任务(增删改查等)。任何一组Transact——SQL语句构成的代码块,都可以作为存储过程保存起来。

1)创建:

Create procedure存储过程名[;编号]

[{@参数数据类型}[varying][=默认值][output]][,…n]

With

{recompile|encryption|recompile,encryption}]

As

SQL语句[…n]

参数说明:

存储过程名对于数据库及其所有者必须唯一。创建局部临时存储过程时,可在存储过程名前加一个#号,创建全局临时存储过程则可加两个#,用以简单区分。

编号:可选整数,用来对同名的存储过程分组,以便用一条drop procedure语句即可将同组的存储过程一起删除

@参数:过程中的参数,每个过程的参数仅用于该过程本身。默认情况下,参数只能代替常量。

output:表明参数时返回值。使用output参数可将信息返回给调用过程。

recompile:表明不保存该存储过程的执行计划,该存储过程将在运行时重新编译。

encryption:对存储过程进行加密,即不能修改该存储过程中的SQL语句。

2)执行

使用excute语句执行存储过程,语法格式为:

[[exec[ute]]

{[@返回状态=]{存储过程名|@存储过程名变量}}

[[@参数名称=]{值|@变量[output]|[default]}]

[,…n]

[With recompile]

(Ps:SQL中的EXEC命令有两个用法:执行一个存储过程,或者执行一个动态批次。批次是一个内容为SQL语句的字符串)

3)查看和修改存储过程

比较简单一点的就是在企业管理器中对存储过程右击进行相应操作,再者就是用alter procedure语句修改和sp_rename进行重命名,删除时用dropprocedure语句即可

2.优缺点

在本文的开头已经提到存储过程的功能是可以由其它程序替代的,那么一个数据库是否有必要设计存储过程呢?

1)优点

a.安全性:可以防止SQL注入式攻击,可设定只有某些用户具有对存储过程的使用权

b.提高性能:存储过程只在创建时进行编译,一般SQL语句每执行一次就编译一次,所以存储过程允许程序更快地执行

c.减少网络流量:存储过程的代码直接存储在数据库中,可以减少SQL语句从客户端到服务器端的传输量

d.存储过程可以减少客户端代码的重复,且其可重复使用,从而减少数据库开发人员的工作量

2)缺点

a.移植问题:由于存储过程将应用程序绑定到了SQL Server,因此使用存储过程封装的业务逻辑将限制应用程序的可移植性。

b.重新编译问题:后端代码是运行前编译的,如果带有引用关系的对象发生改变,受影响的存储过程需要重新编译。

3.实例

以机房收费系统的数据库为例,在数据库表中查找指定的卡号并为该卡的金额增加10元。创建存储过程

	Create procedure addCash_proc		--创建一个存储过程,名为addCash_proc
		@CardNo integer			--声明一个参数
	with encryption				--对存储过程进行加密
	as
	begin
		--查找到相应卡号的金额并加上10
		update Student_Info set cash=cash+10 where CardNo =@CardNo 
	end
登录后复制

执行语句如下

	Exec addCash_proc @CardNo='2'
登录后复制

程序执行后卡号为2的金额增加10元。

小结:

存储过程非常便捷,一般熟悉了SQL语句就可以很容易的掌握存储过程的使用,但是如果大量使用可能会给系统维护带来麻烦。在实际应用中,有的人偏好于使用存储过程有的人则尽量避免,在此要考虑好是让数据库服务器负担更多的运算量还是交给客户端,权衡存储过程带来的利与弊再酌情使用。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在iPhone中使Google地图成为默认地图 如何在iPhone中使Google地图成为默认地图 Apr 17, 2024 pm 07:34 PM

iPhone上的默认地图是Apple专有的地理位置提供商“地图”。尽管地图越来越好,但它在美国以外的地区运行不佳。与谷歌地图相比,它没有什么可提供的。在本文中,我们讨论了使用Google地图成为iPhone上的默认地图的可行性步骤。如何在iPhone中使Google地图成为默认地图将Google地图设置为手机上的默认地图应用程序比您想象的要容易。请按照以下步骤操作–先决条件步骤–您必须在手机上安装Gmail。步骤1–打开AppStore。步骤2–搜索“Gmail”。步骤3–点击Gmail应用旁

Hibernate 框架中 HQL 和 SQL 的区别是什么? Hibernate 框架中 HQL 和 SQL 的区别是什么? Apr 17, 2024 pm 02:57 PM

HQL和SQL在Hibernate框架中进行比较:HQL(1.面向对象语法,2.数据库无关的查询,3.类型安全),而SQL直接操作数据库(1.与数据库无关的标准,2.可执行复杂查询和数据操作)。

iPhone中缺少时钟应用程序:如何修复 iPhone中缺少时钟应用程序:如何修复 May 03, 2024 pm 09:19 PM

您的手机中缺少时钟应用程序吗?日期和时间仍将显示在iPhone的状态栏上。但是,如果没有时钟应用程序,您将无法使用世界时钟、秒表、闹钟等多项功能。因此,修复时钟应用程序的缺失应该是您的待办事项列表的首位。这些解决方案可以帮助您解决此问题。修复1–放置时钟应用程序如果您错误地从主屏幕中删除了时钟应用程序,您可以将时钟应用程序放回原位。步骤1–解锁iPhone并开始向左侧滑动,直到到达“应用程序库”页面。步骤2–接下来,在搜索框中搜索“时钟”。步骤3–当您在搜索结果中看到下方的“时钟”时,请按住它并

无法允许访问 iPhone 中的摄像头和麦克风 无法允许访问 iPhone 中的摄像头和麦克风 Apr 23, 2024 am 11:13 AM

您在尝试使用应用程序时是否收到“无法允许访问摄像头和麦克风”?通常,您可以在需要提供的基础上向特定对象授予摄像头和麦克风权限。但是,如果您拒绝权限,摄像头和麦克风将无法工作,而是显示此错误消息。解决这个问题是非常基本的,你可以在一两分钟内完成。修复1–提供相机、麦克风权限您可以直接在设置中提供必要的摄像头和麦克风权限。步骤1–转到“设置”选项卡。步骤2–打开“隐私与安全”面板。步骤3–在那里打开“相机”权限。步骤4–在里面,您将找到已请求手机相机权限的应用程序列表。步骤5–打开指定应用的“相机”

Go语言如何实现数据库的增删改查操作? Go语言如何实现数据库的增删改查操作? Mar 27, 2024 pm 09:39 PM

Go语言是一种高效、简洁且易于学习的编程语言,因其在并发编程和网络编程方面的优势而备受开发者青睐。在实际开发中,数据库操作是不可或缺的一部分,本文将介绍如何使用Go语言实现数据库的增删改查操作。在Go语言中,我们通常使用第三方库来操作数据库,比如常用的sql包、gorm等。这里以sql包为例介绍如何实现数据库的增删改查操作。假设我们使用的是MySQL数据库。

在PHP中使用MySQLi建立数据库连接的详尽教程 在PHP中使用MySQLi建立数据库连接的详尽教程 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

Hibernate 如何实现多态映射? Hibernate 如何实现多态映射? Apr 17, 2024 pm 12:09 PM

Hibernate多态映射可映射继承类到数据库,提供以下映射类型:joined-subclass:为子类创建单独表,包含父类所有列。table-per-class:为子类创建单独表,仅包含子类特有列。union-subclass:类似joined-subclass,但父类表联合所有子类列。

iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 Jul 18, 2024 am 05:48 AM

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

See all articles