六.触发器的用途
1.触发器的介绍:
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
2.
3.
七.SQL Server的程序设计
1.用户自定义函数:
1).创建标量用户自定义函数:
-----------------------------------------------
create function avg_book1(@出版社 nchar(20))
returns float
as
begin
declare @平均定价 float
set @平均定价=(select avg(定价)
from book1
where 出版社=@出版社)
return @平均定价
end
------------------------------------------------
select dbo.avg_book1('中国长安') as '平均价格'
------------------------------------------------
2).创建直接表值用户定义函数:
------------------------------------------------
create function 书摘要(@出版社 nchar(20))
returns table
as
return(select 书名,定价,出版社
from book1
where 出版社=@出版社)
------------------------------------------------
select * from dbo.书摘要('海南')
------------------------------------------------
3).创建多语句表值用户自定义函数:
------------------------------------------------
create function higher_money(@highermoney money)
returns @higher_money Table(编号 nvarchar(255),
书名 nvarchar(255),定价 money,出版社
nvarchar(255))
AS
Begin
insert @higher_money
select bookin.编号,书名,定价,出版社
from bookin,book1
where bookin.编号=book1.编号 and 定价>@highermoney
return
end
------------------------------------------------
select * from dbo.higher_money(500)
------------------------------------------------
2.流程控制语句:
declare @定价 money,@message varchar(250)
set @定价 =2000
if exists (select *
from book1
where 定价>@定价)
begin
select distinct book1.编号,书名,定价
from book1
where 定价>@定价
end
else
set @message='不存在高于8000元的书!'
print @message
3.等待0小时01分0秒后才执行Select语句:
waitfor delay '00:01:00' select * from book1
4.GOTO语句:
declare @sum smallint,@i smallint
set @i = 1
set @sum=0
beg:
if(@i<100)
begin
set @sum=@sum+@i
set @i=@i+1
goto beg
end
print @sum
5.
6.
7.
八.游标的使用与定义
1.游标(CURSOR)是一种数据访问机制,它允许用户访问单独的数据行,而并非对整个行集合进行操作。
2.游标的定义:
游标是一个与Transact-SQL的SELECT语句相关联的符号名,它使用户可逐行访问由SQL Server返回的结果集。游标包括以下两个部分:
1)游标结果集(Crusor Result Set):由定义该游标的Select语句返回的行集合.
2)游标位置(Cursor Position):指向这个行集合某一行的当前指针。
3.游标的优点:
1)允许程序对由查询语句Select返回的行集合中的每一行执行相同或不同的操作,而不是对整个行集合执行同一个操作。
2)提供对基于游标位置的表中的行进行删除与更新的能力。
3)游标实际上是作为面向集合的数据库管理系统(DBMS)和面向行的程序设计之间的桥梁。
4.游标的使用:
1)游标的声明:
DECLARE crusor_name CURSOR
FOR select_statement
[FOR { READ ONLY | UPDATE [OF column_name_list [,...]]}]
2)打开游标:
OPEN cursor_name
3)使用FETCH语句,从结果集中检索单独的行
FETCH [ [ NEXT | FRIOR | FIRST | LAST] FROM] cursor_name [ INTO fetch_target_list]
4)使用游标修改数据:
UPDATE 和DELETE都是集合操作语句,如果只想修改或者删除其中某个记录,则需要用带游标的SELECT 语句查出所有满足条件的记录,从中进一步找出要修改的记录。
5)关闭游标:
CLOSE cursor_name
6)释放游标:
DWALLOCATE CURSOR cursor_name
其中:如果释放一个已经打开但没有关闭的游标,SQL Server 会自动先关闭这个游标,然后再释放它。
<!--EndFragment-->