SQL存储过程全面实例讲解上课讲义Word格式文档下载.docx
- 文档编号:18848788
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:11
- 大小:17.69KB
SQL存储过程全面实例讲解上课讲义Word格式文档下载.docx
《SQL存储过程全面实例讲解上课讲义Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SQL存储过程全面实例讲解上课讲义Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
,
}
FOR
REPLICATION
AS
sql_statement
...n
二、存储过程实例讲解
1.
使用带有复杂
SELECT
语句的简单过程
下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以及
出版社。
该存储过程不使用任何参数。
USE
pubs
IF
EXISTS
(SELECT
name
FROM
sysobjects
WHERE
'
au_info_all'
AND
type
P'
)
DROP
PROCEDURE
au_info_all
GO
AS
au_lname,
au_fname,
title,
pub_name
authors
a
INNER
JOIN
titleauthor
ta
ON
a.au_id
ta.au_id
titles
t
t.title_id
ta.title_id
publishers
p
t.pub_id
p.pub_id
au_info_all
存储过程可以通过以下方法执行:
EXECUTE
--
Or
EXEC
如果该过程是批处理中的第一条语句,则可使用:
2.
使用带有参数的简单过程
下面的存储过程从四个表的联接中只返回指定的作者(提供了姓名)、出版的书籍
以及出版社。
该存储过程接受与传递的参数精确匹配的值。
au_info'
au_info
au_info
@lastname
varchar(40),
@firstname
varchar(20)
au_fname
@firstname
au_lname
@lastname
Dull'
Ann'
3.
使用带有通配符参数的简单过程
该存储过程对传递的参数进行模式匹配,如果没有提供参数,则使用
预设的默认值。
au_info2'
au_info2
varchar(30)
D*'
varchar(18)
*'
LIKE
au_info2
存储过程可以用多种组合执行。
下面只列出了部分组合:
Wh*'
A*'
[CK]ars[OE]n'
Hunter'
Sheryl'
H*'
S*'
4.
使用
参数
参数允许外部过程、批处理或多条
语句访问在过程执行期
间设置的某个值。
下面的示例创建一个存储过程
(titles_sum),并使用一个可选
的输入参数和一个输出参数。
首先,创建过程:
EXISTS(SELECT
sysobjects
titles_sum'
titles_sum
titles_sum
@@TITLE
varchar(40)
@@SUM
money
OUTPUT
Title
Name'
title
title
SUM(price)
titles
@@TITLE
接下来,将该
参数用于控制流语言。
说明
变量必须在创建表和使用该变量时都进行定义。
参数名和变量名不一定要匹配,不过数据类型和参数位置必须匹配(除非使用
variable
形式)。
DECLARE
@@TOTALCOST
money
The*'
<
200
BEGIN
All
of
these
can
be
purchased
for
less
than
$200.'
END
ELSE
The
total
cost
is
$'
+
RTRIM(CAST(@@TOTALCOST
varchar(20)))
下面是结果集:
Name
------------------------------------------------------------------------
Busy
Executive'
s
Database
Guide
Gourmet
Microwave
Psychology
Computer
Cooking
(3
row(s)
affected)
Warning,
null
value
eliminated
from
aggregate.
$200.
5.
游标参数
游标参数用来将存储过程的局部游标传递回调用批处理、存储过程或触发器。
首先,创建以下过程,在
表上声明并打开一个游标:
titles_cursor'
and
titles_cursor
titles_cursor
@titles_cursor
CURSOR
SET
CURSOR
FORWARD_ONLY
STATIC
FOR
*
OPEN
@titles_cursor
接下来,执行一个批处理,声明一个局部游标变量,执行上述过程以将游标赋值给
局部变量,然后从该游标提取行。
@MyCursor
WHILE
(@@FETCH_STATUS
0)
FETCH
NEXT
@MyCursor
CLOSE
DEALLOCATE
6.
WITH
选项
如果为过程提供的参数不是典型的参数,并且新的执行计划不应高速缓存或存储在
内存中,WITH
子句会很有帮助。
titles_by_author'
titles_by_author
titles_by_author
@@LNAME_PATTERN
RECOMPILE
RTRIM(au_fname)
RTRIM(au_lname)
Authors
full
name'
Title
ta
t.title_id
@@LNAME_PATTERN
7.
子句对用户隐藏存储过程的文本。
下例创建加密过程,使用
sp_helptext
系统存储过程获取关于加密过程的信息,然后尝试直接从
syscomments
表中获取关于该过程的信息。
encrypt_this'
encrypt_this
ENCRYPTION
*
authors
object'
comments
have
been
encrypted.
接下来,选择加密存储过程内容的标识号和文本。
c.id,
c.text
c
o
c.id
o.id
o.name
text
列的输出显示在单独一行中。
执行时,该信息将与
id
列信息出现在
同一行中。
----------
------------------------------------------------------------
1413580074
?
e?
(1
H.
创建用户定义的系统存储过程
下面的示例创建一个过程,显示表名以
emp
开头的所有表及其对应的索引。
如果
没有指定参数,该过程将返回表名以
sys
开头的所有表(及索引)。
sp_showindexes'
sp_showindexes
master
@@TABLE
sys*'
TABLE_NAME,
i.name
INDEX_NAME,
indid
INDEX_ID
sysindexes
i
o.id
i.id
@@TABLE
GO
sp_showindexes
emp*'
TABLE_NAME
INDEX_NAME
INDEX_ID
----------------
----------------
employee
employee_ind
1
PK_emp_id
2
(2
8.
使用延迟名称解析
下面的示例显示四个过程以及延迟名称解析的各种可能使用方式。
尽管引用的表或
列在编译时不存在,但每个存储过程都可创建。
proc1'
proc1
Creating
procedure
on
nonexistent
table.
does_not_exist
Here
the
statement
to
actually
see
procedure.
o.id,
c.text
o
c.id
o.type
proc2'
proc2
that
attempts
retrieve
information
a
column
in
an
existing
@middle_init
char
(1)
NULL
au_id,
middle_initial
@middle_init
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 存储 过程 全面 实例 讲解 上课 讲义