没学SQL SERVER之前,我曾想过把自已以前做的一些管理程序升级成ADP,但一看到什么存储过程、视图、触发器之类的东西就头大,然后一直使用的查询也不知道怎么建,实在是很头痛。其实这些东西并没想象中的难以接受及难学,下面我就把自已对于存储过程、视图、触发器还有游标的理解整理一下写出来,就当是温习功课吧,因为过几天要考试了,由于初学,有不对的地方,请各位批评指正。
视图:视图就是MDB中的查询,你在mdb中做的查询,在adp中转成视图就行了,用法是一样的,就是把它当成表来用。
★视图是由查询定义的虚表。
★视图在物理上并不存在,它只是数据库中数据值的存储集合。
★视图与表十分相似,包含若干列和行。可以进行选择、更新和删除操作。但对视图修改有限制。
★使用视图的好处在于,可以控制用户可查看的数据,从而提供了数据的安全性。
存储过程:单独的SQL语句相信大家都用过,过程相信大家也都用过,比如一个按钮的单击事件,事件里的语句就是一个过程,可以在过程里声明变量,以及用流程控制语句改变程序语句的执行顺序。如果单独的SQL语句及普通的过程大家都会用,那存储过程也就没问题了,因为存储过程是单条或多条SQL语句的组合,并可声明变量,可接收、传出变量(参数),也可用流程控制语句改变SQL语句的执行顺序。
★存储过程提供了比个别SQL语句更多的优点:
★更快速地执行:第一次执行时编译,以后可以直接执行。
★本地和远程执行。
★模块化编程方式(重复使用)。
★把大的程序分成小的可以独立运作的存储过程,以后可以在需要的地方调用
★增强的可靠性:可以利用return返回值来检查执行的情况
★一致性。把复杂的操作写成存储过程,在需要时调用,可以避免用户不小心的操作错误。多次使用都一样
★安全性。只要可以执行存储过程,则可以通过存储过程访问无权限访问的数据。
触发器:触发器可以说是表的事件,它对表的某类操作(插入、更新或删除操作)做出反应。
触发器是相当有用的东西,我举一个应用的例子。
仓库管理系统中的两个表:入库明细表、物料表,每当入库明细表新增一条记录,物料表中的“当前库存”字段也要加上相应的数量,这个时候就可用触发器来完成,每当插入记录时,就触发一个过程来完成更改“当前库存”字段的任务。
★触发器是在对表执行插入、更新或删除操作时,作为响应而执行的过程。
★当执行上述任何一项操作时,就会自动启动触发器。
★触发器通常用于强制执行业务规则。从而保证数据的完整性和一致性。
★应使触发器和表的INSERT、UPDATE或DELETE操作相关联。当完成操作语句时,自动执行触发器。
★更改数据时可调用触发器,根据触发器的类型决定:
允许或禁止更改数据
调用业务规则(保证数据有效的规则)
在整个数据库内级联更新和级联删除
游标:
DAO或ADO的记录集大家都用过吧,重温一下使用记录集的步骤:
1、声明记录集,并从记录源中获取记录集
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql As String
Set cn = CurrentProject.Connection
sql = "select * from 表1"
2、打开记录集
rs.Open sql, cn, adOpenKeyset, adLockPessimistic, 1
3、在记录集中读取记录
Do While Not rs.EOF
Debug.Print rs.Fields(1)
rs.MoveNext
Loop
4、关闭记录集及连接
rs.Close
cn.Close
5、释放连接
Set cn = Nothing
下面是游标的使用示例:
1、声明游标,并获取游标所需记录集
declare OrderQty cursor static
for select orderno,sum(Qty) from OrderDetails group by orderNO
declare @v_qty smallint,@v_orderno varchar(10)
2、打开游标
open OrderQty
3、在游标中读取记录
fetch next from OrderQty into @v_orderno,@v_qty
while (@@fetch_status=0)
begin
if @v_qty<25
print 'Order number'+@v_orderno+' has a low order quantity'
else
print 'Order number'+@v_orderno+' has a low order quantity'
fetch next from OrderQty into @v_orderno,@v_qty
end
4、关闭游标
close OrderQty
5、释放游标所点用资源
deallocate OrderQty
看了上面的对比之后是不是觉得游标很象DAO或ADO中的记录集呢,只是某些语法不太一样而已,如果你会使用记录集,只需最多半天时间就可学会使用游标。
★游标(Cursor)可以看成是一个用来保存“记录集”的对象,记录可以逐条从游标中读取。
★SQL Server支持在服务器上定义和存储游标,这些游标称为服务器端游标。
★服务器维护着构成游标的整个记录集。游标通常从存储过程或触发器中调用。
★游标两种特性:处理特性和功能特性。