《SQL Server 2008打入门到精通》–20180716

1.锁

当多个用户以对同一个数目开展改动时会产生并发问题,使用工作就足以解决是题材。但是以以防其他用户修改外一个尚无做到的政工中的数量,就待在工作中因故到锁。
SQL Server
2008提供了强锁模式:排异锁,共享锁,更新锁,意向锁,键范围锁,架构锁和坏容量更新锁。
查询sys.dm_tran_locks视图可以很快了解SQL Server 2008外之加锁情况。

SELECT * FROM sys.dm_tran_locks;

流动:关于锁之知识书中莫仔细讲,将当此后的博客中上。

2.游标

游标是近似于C语言指针一样的组织,是同种植多少看机制,允许用户访问单独的数据行。游标主要由游标结果集和游标位置组成。游标结果集是概念游标的SELECT语句返回行的汇,游标位置是指为这个结果集中某一样实践之指针。
示例1:用游标检索出student表中每行记录
Student表记录如图所示
图片 1
履下列语句

USE test
DECLARE stu_cursor CURSOR FOR
SELECT * FROM student--声明student表的游标stu
OPEN stu_cursor--打开游标
FETCH NEXT FROM stu_cursor--移动该记录指针
WHILE @@FETCH_STATUS=0--@@FETCH_STATUS用于保存FETCH操作的结束信息,=0表示有记录检索成功
BEGIN
FETCH NEXT FROM stu_cursor--游标指针移动到下一条记录
END
CLOSE stu_cursor--关闭游标
DEALLOCATE stu_cursor--释放游标资源

结果如图所示
图片 2

2.1.游标定义之参数LOCAL和GLOBAL

游标定义参数LOCAL表示该游标只能作用被此次批处理或函数或存储过程。游标定义参数GLOBAL表示该游标可以作用为大局。
实施下列语句

DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
GO
OPEN stu_cursor
GO

实践结果如下
图片 3
告知句子被,声明了一个student表的游标stu_cursor,在开拓游标时提醒游标不有。因为拖欠游标参数是LOCAL,只能作用被目前批处理告知句被,而打开游标语句和声明语句不在一个批判处理着。如果去丢第一单GO,使鲜单告知句子以同一个批处理着,就会尽如人意实行不见面报错。
推行下列语句

DECLARE stu_cursor1 CURSOR GLOBAL
FOR SELECT * FROM student
GO
OPEN stu_cursor1
GO

履行结果:命令已成就
同LOCAL参数对比,GOLBAL参数设置游标作用为大局,因此OPEN和DECLARE语句不在和一个批处理面临还是可成功实行。

2.2.游标分为游标变量和游标类型

一般来说列语句

--语句1
DECLARE stu_cursor CURSOR
FOR SELECT * FROM student--声明student表的游标名称为stu_cursor并赋值
GO

--语句2
DECLARE @stu_cursor CURSOR--声明游标类型的变量@stu_cursor
SET @stu_cursor=CURSOR FOR--给该变量赋值
SELECT * FROM student

于语句1中一直声明了一个游标并赋值,而报告句2遭遇扬言了游标类型的变量@stu_cursor,然后叫该变量赋值。这两边是殊的。

2.3.游标参数FORWARD_ONLY和SCROLL

FORWARD_ONLY参数设置游标只能由结果集的上马向了方向读取,使用FETCH语句时只能用NEXT,而SCROLL参数设置游标可以由结果集的人身自由方向,任意位置走。如下列语句

--语句1,默认FORWARD_ONLY
DECLARE stu_cursor CURSOR LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH NEXT FROM stu_cursor
GO
--语句2,FORWARD_ONLY参数,FETCH时只能从开始往结束方向
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT * FROM student
OPEN stu_cursor 
FETCH NEXT FROM stu_cursor
GO
--语句3,SCROLL参数,FETCH时可以从任意位置往任意方向
DECLARE stu_cursor CURSOR SCROLL LOCAL
FOR SELECT * FROM student
OPEN stu_cursor
FETCH LAST FROM stu_cursor
GO

2.4.游标的略以

示例2:将student表中stu_enter_score大于600分割的生还减去100分
Student表中之数如图所示
图片 4
尽下列语句

--游标的简单应用
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=600
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
GO

结果如图所示
图片 5

3.存储过程

积存过程是同等组用于完成一定功能的语句集,经过编译后存储于数据库被。在SQL
Server 2008受,既可以据此T-SQL编写存储过程,也堪为此CLR编写存储过程。

3.1.用户定义之囤积过程

该种存储过程是依封装了可选用代码的模块或者经过,有2种类型:T-SQL存储过程与CLR存储过程。
T-SQL存储过程是指保存之T-SQL语句集合
CLR存储过程是凭对Microsoft .NET Framework公共语言运行时(CLR)方法的援

3.2.恢宏存储过程

推而广之存储过程是依靠好动态加载与运作的DLL,允许利用编程语言(如C语言)创建好的标例程。扩展存储过程一直以SQL
Server 2008的实例的地点空间受到运行,可以用SQL
Server扩展存储过程API完成编程。

3.3.系统存储过程

系存储过程是据储存于来源数据库中,以sp开头的囤积过程,出现在每个系统定义数据库与用户定义数据库的sys架构中。

3.3.1.创办存储过程规则

于筹划和创建存储过程时,应该满足一定之约束和规则。

  • CREATE
    PROCEDURE定义自己可以包自由数量与类别的SQL语句,但下表中的语句除外。不可知以存储过程的别样位置应用这些话。
  • 可以引用在集合存储过程遭到开创的对象,只要引用时已经创造了该对象
  • 足于蕴藏过程外援临时表
  • 只要当囤过程遭到开创了当地临时表,该临时表仅为该存储过程要在,退出该存储过程后,该临时表会消失
  • 倘若实行之仓储过程调用了其它一个仓储过程,被调用的存储过程可以看第一个存储过程的有所目标,包括临时表
  • 若是实行针对长途SQL Server
    2008实例进行反的长距离存储过程,这些改动将不可知被回滚。远程存储过程未参与事务处理
  • 积存过程中的参数的极致可怜数据也2100
  • 仓储过程中之一部分变量的顶酷数额只有受可用内存的界定
  • 因可用内存的不同,存储过程绝充分可高达128MB
语句 语句 语句
CREATE AGGREGATE CREATE RULE CREATE DEFAULT
CREATE SCHEMA CREATE(ALTER) FUNCTION CREATE(ALTER) TRIGGER
CREATE(ALTER) PROCEDURE CREATE(ALTER) VIEW SET PARSEONLY
SET SHOWPLAN_ALL SET SHOWPLAN_TEXT SET SHOWPLAN_XML
USE database_name

3.3.2.限存储过程外的名称

每当蕴藏过程外,如果用于语句的对象没限制架构,则架将默认为该存储过程的架。如果创建该存储过程的用户并未界定INSERT,SELECT,UPDATE或DELETE语句被援引的表名或试图名,则默认情况下通过该存储过程进行的造访将负该过程创建者权限的范围。如果有其他用户要动存储过程,则兼具用于数据定义语言(DDL)的语句(如CREATE,ALTER,EXECUTE,DROP,DBCC或动态SQL语句)的对象名应当据此该目标架构的名号来限制。

3.3.3.加密存储过程的概念

苟只要创建存储过程并确保其他用户无法查看该存储过程的概念,则可用WITH
ENCRYPTION,这样,过程定义将因为不足读之形式储存。

3.3.4.SET语词选项

当创建或者重新改T-SQL存储过程后,数据库引擎将保存SET
QUOTED_IDENTIFIER和SET
ANSI_NULLS的装置,执行存储过程不时将采用这些老设置而忽视任何客户端会话的ET
QUOTED_IDENTIFIER和SET
ANSI_NULLS设置。其他SET选项在创立或者改变存储过程后未保留。

3.4.应用存储过程

3.4.1.创办存储过程

示例3:将示例2用存储过程实现
Student表的多寡如图所示
图片 6
实施下列语句

CREATE PROCEDURE alter_data
@a int--参数
AS
BEGIN
DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
FOR SELECT stu_no,stu_enter_score FROM student
OPEN stu_cursor
DECLARE @score INT
DECLARE @stu_no VARCHAR(8)
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
WHILE @@FETCH_STATUS=0 
BEGIN
IF @score>=@a
BEGIN
UPDATE student
SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
END
FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
END
CLOSE stu_cursor
DEALLOCATE stu_cursor
END
GO
EXEC dbo.alter_data '600'

结果如图所示
图片 7

3.4.2.查看存储过程

好经使用系统存储过程要目录视图查看存储过程的概念

3.4.2.1.图形化界面

如下图
图片 8

3.4.2.2.系统存储过程sp_helptext查看存储过程定义

履行下列语句

EXEC sp_helptext 'alter_data'

结果如图所示
图片 9

3.4.2.3.网存储过程sp_depends查看存储过程有关消息

施行下列语句

EXEC sp_depends 'alter_data'

结果如图所示
图片 10

3.4.2.4.目录视图查看存储过程

实践下列语句

SELECT * FROM sys.procedures

结果如图所示
图片 11

3.4.3.窜存储过程

ALTER
PROCEDURE
晓句子修改存储过程,只待将地方示例中的CREATE修改成ALTER运行就实施了。

3.4.4.刨除存储过程

履行下列语句删除存储过程

DROP PROCEDURE alter_data

相关文章