月亮代表我的心

个人博客,跟月亮无关,跟代表无关,无关谁的心

Sql Server 复习笔记(4)

视图

创建

1.只能在当前数据库中创建
2.可以基于其它视图建立视图,不能使用临时表,最多允许嵌套32级的视图,最多可包含1024列
3.即使表删除了,视图依然存在
4.定义视图不能包含:ORDER BY,COMPUTE,COMPUTE BY,INTO

create VIEW [ < database_name > .] [ < owner > .] view_name
AS
select_statement

修改

1.update和insert语句只有在它们仅修改视图的其中一个基表中的数据时才可以引用可更新的视图
2.delete语句仅在视图的FROM子句中只包含一个表时才可以引用可更新视图

游标

一种能从包括多条数据记录的结果集中每次提取一条记录的机制
游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作

API服务器游标类型:

只进游标
静态游标
键集驱动游标
动态游标

提取:

FETCH FIRST
FETCH LAST
FETCH NEXT
FETCH PRIOR
FETCH ABSOLUTE n
从开头或结尾提取第n行
FETCH RELATIVE n
从当前行提取第n行

FETCH 语句全局变量:

@@FETCH _STATUS:为执行的上一个游标 FETCH 语句返回一个整数值。
表示上一次FETCH操作成功,@@FETCH _STATUS=0
@@CURSOR_ROWS:返回当前打开的游标中符合条件的行的数目。
注意:对动态游标, @@CURSOR_ROWS总为-1

使用:

声明(创建)游标
DECLARE <Cursor_Name> CURSOR SCROLL]
FOR <select Statements>
FOR update OF Column_name…

打开游标

OPEN

检索记录
FETCH NEXT FROM INTO 变量

修改记录
update table1 set field1=values1 where current of

关闭游标
CLOSE

删除游标引用
DEALLOCATE

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*********游标**********/

--声明变量
DECLARE @start_no INT,@class_no VARCHAR(10),@stud_no VARCHAR(11)
SELECT @start_no=1001,@class_no='4021132T01'

--声明游标
DECLARE c_student cursor SCROLL FOR

SELECT stud_no FROM student WHERE class_no=@class_no ORDER BY stud_id

FOR UPDATE OF stud_no

--打开游标
OPEN c_student

BEGIN tran
--检索第一行
fetch FIRST FROM c_student --into @stud_no
while @@fetch_status=0 --判断FETCH 语句是否成功
BEGIN
UPDATE student SET stud_no=@start_no
WHERE CURRENT OF c_student
SET @start_no=@start_no+1
--检索下一行
fetch NEXT FROM c_student --into @stud_no
END
commit

--删除游标
deallocate c_student
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注