<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <pre></pre>
讯享网
前言
Transact-SQL(T-SQL)是一种用于 Microsoft SQL Server 和 Azure SQL Database 等关系数据库管理系统的扩展 SQL 语言。
在数据库开发中,存储过程是一个非常重要的概念,它是一个可重复使用的程序,可用于执行特定的任务和数据处理。它具有很多的优点,例如减少网络流量,维护方便,提高性能等等。在本文章中,我们将深入探讨存储过程的定义,种类以及使用方法。
一、什么是存储过程
存储过程(Procedure)是一组为了完成特定功能的 SQL 语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。
由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的 SQL 语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。
1.1 存储过程的优点
存储过程提供了性能优化、代码复用、安全性、事务控制、网络传输减少等多个方面的优点,使得数据库应用程序更加高效、安全、可靠和易于维护。
总结起来存储结构的几个特点有:
二、存储过程的种类
2.1 SQL Server 系统存储过程
系统存储过程是 SQL Server系统自身提供的存储过程,可以作为命令执行各种操作。
系统存储过程目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程主要存储在master数据库中,以下划线开头的存储过程。尽管这些系统存储过程定义在系统定义和用户定义的数据库中,在调用时不必在存储过程前加数据库限定名。有一些系统存储过程会在创建新的数据库的时候被自动创建在当前数据库中。
常用系统存储过程有:
讯享网
系统存储过程创建并存放在与系统数据库 master 中,一些系统存储过程只能由系统管理员使用,而有些系统存储过程通过授权可以被其它用户所使用。
2.2 SQL Server 扩展存储过程
扩展存储过程(Extended Stored Procedure)是一种特殊的存储过程,它是使用 C 或 C++ 编程语言编写的外部可执行程序,可以在 SQL Server 中被调用。扩展存储过程允许开发人员在 SQL Server 中执行特定的操作,例如访问操作系统资源,实现自定义的数据访问方法,或与第三方库进行交互等。相比于传统的 T-SQL 存储过程,扩展存储过程更加灵活和强大,但也更加复杂和难以维护。需要注意的是,扩展存储过程的使用需要小心谨慎,特别是在安全方面,以防止恶意代码的执行和数据泄露。
扩展存储过程以前缀来标识,对于用户来说,扩展存储过程和普通话存储过程一样,可以用相同的方法来执行。
2.2.1 常见的扩展存储过程与用法举例
xp_cmdshell:该扩展存储过程允许在SQL Server中执行操作系统命令,例如创建、删除文件目录等等。例如,在执行以下语句之后,将在SQL Server主机上创建c: est目录:
xp_readerrorlog:该扩展存储过程可用于从SQL Server错误日志中读取信息。例如,以下语句将返回最近50个错误日志记录:
讯享网
xp_fixeddrives:该扩展存储过程可用于返回计算机上所有可用的逻辑驱动器的名称和类型。例如,以下语句将返回有关计算机上所有逻辑驱动器的信息:
xp_sprintf:这个扩展存储过程看起来就有点像入门写C语言的printf 函数了。燃鹅即时这样,我认为其实用到它的机会并不多。大部分使用的场景如下:
讯享网
xp_sendmail:该扩展存储过程可用于通过SMTP服务器发送电子邮件。例如,以下语句将向收件人发送一封测试邮件:
xp_regread 和 xp_regwrite:这两个扩展存储过程用于读取和写入Windows注册表中的值。例如,以下语句将从HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersion键中读取注册表项的值:
讯享网
xp_create_subdir:该扩展存储过程用于创建新目录。例如,以下语句将在c: emp目录下创建名为test的新目录:

xp_sscanf:这个扩展存储过程是对插入的字符串变量进行格式化取值。
讯享网
xp_enumgroups 和 xp_logininfo:这两个扩展存储过程用于获取有关Windows组和用户的信息。例如,以下语句将返回所有本地用户和组的信息:
xp_delete_file 和 xp_deletemail:这两个扩展存储过程可用于删除文件和电子邮件收件箱中的邮件。例如,以下语句将删除c: emp est.txt文件:
讯享网
xp_terminate_process:该扩展存储过程用于杀死指定的进程。例如,以下语句将杀死进程ID为1234的进程:
2.3 用户自定义存储过程
2.3.1 创建存储过程的语法
讯享网
2.3.2 创建不带参数存储过程
2.3.3 修改存储过程
这里有两种方法进行修改:
- 使用语句进行修改
讯享网
- 使用函数修改存储过程的名称
2.3.4 创建带参存储过程
讯享网
2.3.5 创建通配符参数的存储过程
在工作用,可以使用通配符参数存储过程来搜索满足特定条件的数据,从而避免查询的重复和繁琐,同时也可以对搜索结果进行排序或其他变换操作,进一步提高查询效率。
2.3.6 创建带输出参数的存储过程
带有输出参数的存储过程在 SQL Server 中的应用场景主要是用于向调用过程传递有关在存储过程执行过程中计算出的值,因此,可以在SQL服务器中使用输出参数来实现跨存储过程的参数传递,或者用来实现输出参数的值及其状态的检查。
输出参数的主要作用是让程序可以从存储过程中获取计算出的值,它允许在运行时在存储过程中作出更多的决策,因为用户可以使用输出参数来方便地获取数据,从而避免执行另一个查询来获取数据,并且可以将数据传递给另一个存储过程。
讯享网
2.3.7 创建不缓存存储过程
不缓存存储过程的应用场景主要有两个:
- 执行非常耗时的任务,比如复杂的查询和大数据的处理等;
- 当数据库环境变化时,可以快速更新存储过程信息而不需要重启服务器。
不缓存存储过程的作用是提高执行效率和实现动态更新存储过程的信息。它可以有效地减少数据库服务器的开销,确保服务器的稳定可用性,并且能够有效地处理海量的数据。
2.3.8 创建加密的存储过程
SQL Server 中的加密存储过程的应用场景主要是为了提高数据库安全性,例如,可以避免对数据库对象的意外删除或修改,防止对数据的不恰当访问,以及为数据库安全性预防网络黑客攻击。加密存储过程也可以用来防止用户从数据库获取非授权信息。加密存储过程也可以用来存储和传输敏感数据,保护数据库的安全性和完整性。
这种创创建方式以及作用类似于我之前的视图讲解中的一样,有兴趣的同学可以参看之前的博文《【SQL Server】数据库开发指南(六)索引和视图的使用技巧、方法与综合应用》
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/202228.html