没有合适的资源?快使用搜索试试~ 我知道了~
SQL SERVER的存储过程语法 SQL SERVER 2000 安装指南.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 162 浏览量
2022-07-06
12:14:45
上传
评论
收藏 775KB DOC 举报
温馨提示
试读
25页
SQL SERVER的存储过程语法 SQL SERVER 2000 安装指南
资源推荐
资源详情
资源评论
SQL SERVER 的存储过程语法
时间:2007-05-29 来源: 作者: 编辑:coyou
内容提要:CREATE PROCEDURE
创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的
Transact-SQL 语句的集合。可以创建一个过程供永久使用,或在一个会话中临
时使用(局部临时过程),或在所有会话中临时使用(全
SQL SERVER的存储过程语法(2)
Cursor 输出参数
在执行过程时,以下规则适用于 cursor 输出参数:
对于只进游标,游标的结果集中返回的行只是那些存储过程执行结束时处于或超
出游标位置的行,例如:
在过程中的名为 RS 的 100 行结果集上打开一个非滚动游标。
过程提取结果集 RS 的头 5 行。
过程返回到其调用者。
返回到调用者的结果集 RS 由 RS 的第 6 到 100 行组成,调用者中的游标处于
RS 的第一行之前。
对于只进游标,如果存储过程完成后,游标位于第一行的前面,则整个结果集将
返回给调用批处理、存储过程或触发器。返回时,游标将位于第一行的前面。
对于只进游标,如果存储过程完成后,游标的位置超出最后一行的结尾,则为调
用批处理、存储过程或触发器返回空结果集。
说明 空结果集与空值不同。
对于可滚动游标,在存储过程执行结束时,结果集中的所有行均会返回给调用批
处理、存储过程或触发器。返回时,游标保留在过程中最后一次执行提取时的位
置。
对于任意类型的游标,如果游标关闭,则将空值传递回调用批处理、存储过程或
触发器。如果将游标指派给一个参数,但该游标从未打开过,也会出现这种情况。
说明 关闭状态只有在返回时才有影响。例如,可以在过程中关闭游标,稍后
再打开游标,然后将该游标的结果集返回给调用批处理、存储过程或触发器。
临时存储过程
SQL Server 支持两种临时过程:局部临时过程和全局临时过程。局部临时过程只
能由创建该过程的连接使用。全局临时过程则可由所有连接使用。局部临时过程
在当前会话结束时自动除去。全局临时过程在使用该过程的最后一个会话结束时
除去。通常是在创建该过程的会话结束时。
临时过程用 # 和 ## 命名,可以由任何用户创建。创建过程后,局部过程的所有
者是唯一可以使用该过程的用户。执行局部临时过程的权限不能授予其他用户。
如果创建了全局临时过程,则所有用户均可以访问该过程,权限不能显式废除。
只有在 tempdb 数据库中具有显式 CREATE PROCEDURE 权限的用户,才可以在该
数据库中显式创建临时过程(不使用编号符命名)。可以授予或废除这些过程中
的权限。
说明 频繁使用临时存储过程会在 tempdb 中的系统表上产生争用,从而对性能
产生负面影响。建议使用 sp_executesql 代替。sp_executesql 不在系统表中存
储数据,因此可以避免这一问题。
自动执行存储过程
SQL Server 启动时可以自动执行一个或多个存储过程。这些存储过程必须由系统
管理员创建,并在 sysadmin 固定服务器角色下作为后台过程执行。这些过程不
能有任何输入参数。
对启动过程的数目没有限制,但是要注意,每个启动过程在执行时都会占用一个
连接。如果必须在启动时执行多个过程,但不需要并行执行,则可以指定一个过
程作为启动过程,让该过程调用其它过程。这样就只占用一个连接。
在启动时恢复了最后一个数据库后,即开始执行存储过程。若要跳过这些存储过
程的执行,请将启动参数指定为跟踪标记 4022。如果以最低配置启动 SQL Server
(使用 -f 标记),则启动存储过程也不会执行。有关更多信息,请参见跟踪标
记。
若要创建启动存储过程,必须作为 sysadmin 固定服务器角色的成员登录,并在
master 数据库中创建存储过程。
使用 sp_procoption 可以:
将现有存储过程指定为启动过程。
停止在 SQL Server 启动时执行过程。
查看 SQL Server 启动时执行的所有过程的列表。
存储过程嵌套
存储过程可以嵌套,即一个存储过程可以调用另一个存储过程。在被调用过程开
始执行时,嵌套级将增加,在被调用过程执行结束后,嵌套级将减少。如果超出
最大的嵌套级,会使整个调用过程链失败。可用 @@NESTLEVEL 函数返回当前的嵌
套级。
若要估计编译后的存储过程大小,请使用下列性能监视计数器。
性能监视器对象名 性能监视计数器名称
SQLServer:缓冲区管理器 高速缓存大小(页面数)
SQLServer:高速缓存管理器 高速缓存命中率
高速缓存页
高速缓存对象计数*
* 各种分类的高速缓存对象均可以使用这些计数器,包括特殊 sql、准备 sql、
过程、触发器等。
有关更多信息,请参见 SQL Server:Buffer Manager 对象和 SQL Server:Cache
Manager 对象。
sql_statement 限制
除了 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL 之外(这两个语句必须是批处理中
仅有的语句),任何 SET 语句均可以在存储过程内部指定。所选择的 SET 选项
在存储过程执行过程中有效,之后恢复为原来的设置。
如果其他用户要使用某个存储过程,那么在该存储过程内部,一些语句使用的对
象名必须使用对象所有者的名称限定。这些语句包括:
ALTER TABLE
CREATE INDEX
CREATE TABLE
所有 DBCC 语句
DROP TABLE
DROP INDEX
TRUNCATE TABLE
UPDATE STATISTICS
权限
CREATE PROCEDURE 的权限默认授予 sysadmin 固定服务器角色成员和 db_owner
和 db_ddladmin 固定数据库角色成员。sysadmin 固定服务器角色成员和
db_owner 固定数据库角色成员可以将 CREATE PROCEDURE 权限转让给其他用户。
执行存储过程的权限授予过程的所有者,该所有者可以为其它数据库用户设置执
行权限。
示例
A. 使用带有复杂 SELECT 语句的简单过程
下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以
及出版社。该存储过程不使用任何参数。
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'au_info_all' AND type = 'P')
DROP PROCEDURE au_info_all
GO
CREATE PROCEDURE au_info_all
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
GO
au_info_all 存储过程可以通过以下方法执行:
EXECUTE au_info_all
-- Or
EXEC au_info_all
如果该过程是批处理中的第一条语句,则可使用:
au_info_all
B. 使用带有参数的简单过程
下面的存储过程从四个表的联接中只返回指定的作者(提供了姓名)、出版的书
籍以及出版社。该存储过程接受与传递的参数精确匹配的值。
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'au_info' AND type = 'P')
DROP PROCEDURE au_info
GO
USE pubs
GO
CREATE PROCEDURE au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO
au_info 存储过程可以通过以下方法执行:
EXECUTE au_info 'Dull', 'Ann'
-- Or
EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
EXECUTE au_info @firstname = 'Ann', @lastname = 'Dull'
-- Or
EXEC au_info 'Dull', 'Ann'
-- Or
EXEC au_info @lastname = 'Dull', @firstname = 'Ann'
-- Or
EXEC au_info @firstname = 'Ann', @lastname = 'Dull'
如果该过程是批处理中的第一条语句,则可使用:
剩余24页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 79
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 第12章spring-mvc自定义类型转换器
- 基于PHP图书管理系统实验报告.docx
- Python爬取淘宝热卖商品并可视化分析
- 5152单片机proteus仿真和源码将按键次数写入AT24C02再读出并用1602LCD显示
- SE-SSD复现过程(Det3D的安装教程)
- 基于Python的在线学习与推荐系统设计与实现(论文+源码)-kaic
- 串口通过 YMODEM 协议进行文件传输
- 蓝桥杯2024年第十五届省赛真题-前缀总分
- com.qihoo.appstore_300101305-1.apk
- tensorflow-gpu-2.7.1-cp37-cp37m-manylinux2010-x86-64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功