SQL-SERVER数据库中的游标、存储过程和触发器 关键词 SQL-SERVER、游标、存储过程、触发器、高效处理数据
2012-09-26 13:07
555 查看
SQL-SERVER是一种关系型数据库管理系统,能够与WINDOWS平台紧密集成,以一种简单的方式来完成各种复杂的任务。SQL-SERVER管 理大量数据,允许大量用户进行并发访问,维护数据的完整性和安全性。本文正是从游标、存储过程、触发器三个方面论述SQL-SERVER高效处理数据的方法。
1 SQL-SERVER数据库简介
SQL-SERVER是一个功能完备而强大的数据库管理系统。在SQL-SERVER中,数据和程序被划分为不同的逻辑组件,称为数据库对象,通过访问和管理数据库对象来访问和管理SQL-SERVER中的信息。表是SQL-SERVER中的最重要的数据库对象。数据库被存储在一个或者多个数据库文件中。关系数据库系统是让用户用语句来获得和修改与实体相关的信息。所有的主流数据库都支持用标准的SQL语言来作业。
2 SQL-SERVER数据库中的游标、存储过程、触发器
2.1 游标的作用、功能及其优点
SQL-SERVER中的“游标”是一种数据库对象,应用程序用它来对结果集实行“行集”操作。
SQL-SERVER支持CLIENT游标、API SERVER游标和T-SQL游标。T-SQL游标和其它种类的游标区别是:T-SQL游标在存储过程、批处理、函数、或触发器中使用,用于重复对光标每一行的定制的处理。其它种类的游标被设计用于从客户应用程序中访问数据库信息。本文以T-SQL游标为例。
下面,声明一个FORWARD_ONLY游标,该游标允许对其数据进行修改。在查询分析器中执行下列语句:
DECLARE JobsCursor CURSOR FORWARD_ONLY FOR
SELECT * FROM jobs WHERE min_lvl=75 FOR UPDATE
OPEN JobsCursor
FET CH JobsCursor
UPDATE jobs
SET max_lvl=100 WHERE CURRENT OF JobsCursor
SELECT * FROM jobs WHERE min_lvl=75
CLOSE JobsCursor
DEALLOCATE JobsCursor
游标的优点: 游标的这种行集设计方法是处理数据的一个强有力的工具。
2.2 存储过程的作用、功能及其优点
SQL-SERVER中的“存储过程”是一组预编译的SQL语句。T-SQL语句是充当SQL-SERVER数据库和用户应用程序间的编程接口。存储和执行T-SQL程序的方法有两种,一种是本地存储程序,另一种是将程序存储为SQL-SERVER中的“存储过程”,然后创建应用程序执行存储过程。
通过编写存储过程来运行经常执行的管理任务,或者应用复杂的业务规则。SQL-SERVER中的存储过程分为“系统存储过程”和“用户定义的存储过程”。系统存储过程用以管理SQL-SERVER和显示有关数据库和用户的信息,系统存储过程充当从系统表中检索信息的快捷方式,如:sp-stored-procedures列出当前环境中的所有存储过程。
SQL-SERVER存储过程具有以下几点功能:
a. 通过输入,输出参数与调用程序通讯;
b. 返回一个称为返回代码的整型值,以表明过程的执行状态;
c. 具有方便的重新编译其过程的方法,用EXECUTE与WITH RECOMPILE 子句;
下面,声明一个简单的存储过程。在查询分析器中执行下列语句:
create procedure ss
@intvalue1 int,@intvalue2 int,@inttotal int output
as select @inttotal=@intvalue1+@intvalue2
go
declare @inttotal int
exec ss 15,9, @inttotal output
print ‘the total of 15 and 9 is’+convert(char(8), @inttotal)
执行结果为:the total of 15 and 9 is 25
存储过程具有以下优点:
a. 允许模块化程序设计。
b. 只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可独立于程序源代码而单独修改。
c. 运行速度快。存储过程将比T-SQL批代码的执行要快。存储过程是被编译后存放在数据库服务器的过程高速缓存中,当使用时,服务器不必再重新分析和编译它们。
d. 减少网络流量。在网络中要发送的数百行代码,可由一条执行其过程代码的一条单独语句就可实现。
e. 有安全机制。可授予没有直接执行存储过程中语句的权限的用户,也可执行该存储过程的权限。另外可以防止用户直接访问表,强制用户使用存储过程执行特定的任务。
2.3 触发器的作用、功能及其优点
SQL-SERVER中的“触发器”是一种强制业务规则和数据完整性的一种类型机制,它是一种特殊类型的存储过程。SQL-SERVER有两种类型的触发器:“AFTER触发器”和 “INSTEAD OF触发器”。
触发器具有以下几点功能:
a. 以“侦测”数据库内的操作,确保输入表中的数据的有效性;
b. 实现“层叠删除” ,如在表INVENTORY和INVENTORY PROPERTY之间不存在外键,但用一个触发器可以监视INVENTORY表中记录的删除情况,及另一个表与之有关联的记录;
c. 访问“INSERTED表”和”DELETED表中的内容。如对更新类型触发器的表来讲,将在“删除表”中存放旧值,而在“插入表”中存放新值。删除表和插入表是每个触发器都有的两个特殊的虚拟表,这两个表是逻辑表,并动态存贮在内存中;
下面,将创建一个UPDATE触发器,以确保PRODUCTS表中现有的UnitsOnOrder和ReorderLevel列不会被修改为小于10的值。每次执行此操作时,都执行该触发器。以下是在查询分析器中实现的T-SQL块:
CREATE TRIGGER CheckProductUpdate
ON Products For UPDATE AS
IF((SELECT UnitsOnOrder FROM INSERTED)<10)
OR((SELECT ReorderLevel FROM INSERTED)<10)
BEGIN
PRINT ‘错误,不能小于10!’
ROLLBACK TRANSACTION
END
执行下面的语句:
UPDATE Products SET UnitsOnOrder=5 WHERE ProductID=5
执行结果为:错误,不能小于10!
保证了UnitsOnOrder和ReorderLevel列不会被修改为小于10的值。
d. “INSEAD OF触发器”提供了基于联接条件的视图所“不支持”的数据删除操作。INSTEAD OF触发器可以基于一个数据修改操作。这是SQL-SERVER触发器的另一个重要功能之一;
下面创建一个基于employee表和publisher表的视图,要使对此视图进行更新,必须通过INSTEAD OF触发器来删除数据。
以下是在查询分析器中的T-SQL块:
CREATE VIEW Emp_pub As
SELECT emp_id,lname,job_id,pub_name
FROM employee e,publishers p WHERE e.pub_id=p.pub_id
CREATE TRIGGER del_emp ON Emp_pub
INSERTED OF DELETE AS
DELETE employee WHERE emp_id IN (SELECT emp_id FROM DELETED)
执行下面的语句,删除数据。
DELETE Emp_pub WHERE emp_id=’POK93028M’
e. 触发器与存储过程类似,亦可进行加密处理。以保证代码的安全。
触发器的优缺点:触发器常用于强制业务规则和数据完整性的强大工具。据资料分析,提倡简化使用触发器,没有必要使代码太复杂而让人费解。也不要太多使用触发器,因为触发器的执行,高度和管理很复杂。
3 游标、存储过程、触发器三者的联系
SQL-SERVER数据库中的游标、存储过程、触发器三者从不同方面提高了数据处理能力。参见下面的图1.
触发器是一种特殊类型的存储过程,它主要是通过事件进行触发而被执行的,而存储过程是通过存储过程的名字而被直接调用;游标可提供脚本,存储过程和触发器中使用的访问结果集中的数据的T-SQL语句。
图1 高效处理数据图
4 结 论
SQL-SERVER是一个关系数据库,用于各种企业组织及专业数据库和应用开发环境中。能迅速地设计和开发客户/服务器。
游标的行集操作设计方法是一个强有力的工具,要合理使用游标。游标主要用于实现一些不能使用面向集合的语句实现的操作。
T-SQL的存储过程的功能强大,甚至可以实现最复杂的商业事务,存储过程结合了过程和非过程两种方法。具有通讯、模块设计、执行快等优点。
“触发器”是一种强制业务规则和数据完整性的一种类型机制,它是一种特殊类型的存储过程。触发器中的两个虚拟表及SQL-SERVER 2000新应用的INSEAD OF 触发器都是SQL-SERVER中强制业务规则的强有力工具。
总之,SQL-SERVER中的游标、存储过程和触发器是SQL-SERVER数据库灵魂的三个重要方面。另外,它们 “高效处理数据库中数据”的方法,是学习其它数据库的一个重要启示!
1 SQL-SERVER数据库简介
SQL-SERVER是一个功能完备而强大的数据库管理系统。在SQL-SERVER中,数据和程序被划分为不同的逻辑组件,称为数据库对象,通过访问和管理数据库对象来访问和管理SQL-SERVER中的信息。表是SQL-SERVER中的最重要的数据库对象。数据库被存储在一个或者多个数据库文件中。关系数据库系统是让用户用语句来获得和修改与实体相关的信息。所有的主流数据库都支持用标准的SQL语言来作业。
2 SQL-SERVER数据库中的游标、存储过程、触发器
2.1 游标的作用、功能及其优点
SQL-SERVER中的“游标”是一种数据库对象,应用程序用它来对结果集实行“行集”操作。
SQL-SERVER支持CLIENT游标、API SERVER游标和T-SQL游标。T-SQL游标和其它种类的游标区别是:T-SQL游标在存储过程、批处理、函数、或触发器中使用,用于重复对光标每一行的定制的处理。其它种类的游标被设计用于从客户应用程序中访问数据库信息。本文以T-SQL游标为例。
下面,声明一个FORWARD_ONLY游标,该游标允许对其数据进行修改。在查询分析器中执行下列语句:
DECLARE JobsCursor CURSOR FORWARD_ONLY FOR
SELECT * FROM jobs WHERE min_lvl=75 FOR UPDATE
OPEN JobsCursor
FET CH JobsCursor
UPDATE jobs
SET max_lvl=100 WHERE CURRENT OF JobsCursor
SELECT * FROM jobs WHERE min_lvl=75
CLOSE JobsCursor
DEALLOCATE JobsCursor
游标的优点: 游标的这种行集设计方法是处理数据的一个强有力的工具。
2.2 存储过程的作用、功能及其优点
SQL-SERVER中的“存储过程”是一组预编译的SQL语句。T-SQL语句是充当SQL-SERVER数据库和用户应用程序间的编程接口。存储和执行T-SQL程序的方法有两种,一种是本地存储程序,另一种是将程序存储为SQL-SERVER中的“存储过程”,然后创建应用程序执行存储过程。
通过编写存储过程来运行经常执行的管理任务,或者应用复杂的业务规则。SQL-SERVER中的存储过程分为“系统存储过程”和“用户定义的存储过程”。系统存储过程用以管理SQL-SERVER和显示有关数据库和用户的信息,系统存储过程充当从系统表中检索信息的快捷方式,如:sp-stored-procedures列出当前环境中的所有存储过程。
SQL-SERVER存储过程具有以下几点功能:
a. 通过输入,输出参数与调用程序通讯;
b. 返回一个称为返回代码的整型值,以表明过程的执行状态;
c. 具有方便的重新编译其过程的方法,用EXECUTE与WITH RECOMPILE 子句;
下面,声明一个简单的存储过程。在查询分析器中执行下列语句:
create procedure ss
@intvalue1 int,@intvalue2 int,@inttotal int output
as select @inttotal=@intvalue1+@intvalue2
go
declare @inttotal int
exec ss 15,9, @inttotal output
print ‘the total of 15 and 9 is’+convert(char(8), @inttotal)
执行结果为:the total of 15 and 9 is 25
存储过程具有以下优点:
a. 允许模块化程序设计。
b. 只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可独立于程序源代码而单独修改。
c. 运行速度快。存储过程将比T-SQL批代码的执行要快。存储过程是被编译后存放在数据库服务器的过程高速缓存中,当使用时,服务器不必再重新分析和编译它们。
d. 减少网络流量。在网络中要发送的数百行代码,可由一条执行其过程代码的一条单独语句就可实现。
e. 有安全机制。可授予没有直接执行存储过程中语句的权限的用户,也可执行该存储过程的权限。另外可以防止用户直接访问表,强制用户使用存储过程执行特定的任务。
2.3 触发器的作用、功能及其优点
SQL-SERVER中的“触发器”是一种强制业务规则和数据完整性的一种类型机制,它是一种特殊类型的存储过程。SQL-SERVER有两种类型的触发器:“AFTER触发器”和 “INSTEAD OF触发器”。
触发器具有以下几点功能:
a. 以“侦测”数据库内的操作,确保输入表中的数据的有效性;
b. 实现“层叠删除” ,如在表INVENTORY和INVENTORY PROPERTY之间不存在外键,但用一个触发器可以监视INVENTORY表中记录的删除情况,及另一个表与之有关联的记录;
c. 访问“INSERTED表”和”DELETED表中的内容。如对更新类型触发器的表来讲,将在“删除表”中存放旧值,而在“插入表”中存放新值。删除表和插入表是每个触发器都有的两个特殊的虚拟表,这两个表是逻辑表,并动态存贮在内存中;
下面,将创建一个UPDATE触发器,以确保PRODUCTS表中现有的UnitsOnOrder和ReorderLevel列不会被修改为小于10的值。每次执行此操作时,都执行该触发器。以下是在查询分析器中实现的T-SQL块:
CREATE TRIGGER CheckProductUpdate
ON Products For UPDATE AS
IF((SELECT UnitsOnOrder FROM INSERTED)<10)
OR((SELECT ReorderLevel FROM INSERTED)<10)
BEGIN
PRINT ‘错误,不能小于10!’
ROLLBACK TRANSACTION
END
执行下面的语句:
UPDATE Products SET UnitsOnOrder=5 WHERE ProductID=5
执行结果为:错误,不能小于10!
保证了UnitsOnOrder和ReorderLevel列不会被修改为小于10的值。
d. “INSEAD OF触发器”提供了基于联接条件的视图所“不支持”的数据删除操作。INSTEAD OF触发器可以基于一个数据修改操作。这是SQL-SERVER触发器的另一个重要功能之一;
下面创建一个基于employee表和publisher表的视图,要使对此视图进行更新,必须通过INSTEAD OF触发器来删除数据。
以下是在查询分析器中的T-SQL块:
CREATE VIEW Emp_pub As
SELECT emp_id,lname,job_id,pub_name
FROM employee e,publishers p WHERE e.pub_id=p.pub_id
CREATE TRIGGER del_emp ON Emp_pub
INSERTED OF DELETE AS
DELETE employee WHERE emp_id IN (SELECT emp_id FROM DELETED)
执行下面的语句,删除数据。
DELETE Emp_pub WHERE emp_id=’POK93028M’
e. 触发器与存储过程类似,亦可进行加密处理。以保证代码的安全。
触发器的优缺点:触发器常用于强制业务规则和数据完整性的强大工具。据资料分析,提倡简化使用触发器,没有必要使代码太复杂而让人费解。也不要太多使用触发器,因为触发器的执行,高度和管理很复杂。
3 游标、存储过程、触发器三者的联系
SQL-SERVER数据库中的游标、存储过程、触发器三者从不同方面提高了数据处理能力。参见下面的图1.
触发器是一种特殊类型的存储过程,它主要是通过事件进行触发而被执行的,而存储过程是通过存储过程的名字而被直接调用;游标可提供脚本,存储过程和触发器中使用的访问结果集中的数据的T-SQL语句。
图1 高效处理数据图
4 结 论
SQL-SERVER是一个关系数据库,用于各种企业组织及专业数据库和应用开发环境中。能迅速地设计和开发客户/服务器。
游标的行集操作设计方法是一个强有力的工具,要合理使用游标。游标主要用于实现一些不能使用面向集合的语句实现的操作。
T-SQL的存储过程的功能强大,甚至可以实现最复杂的商业事务,存储过程结合了过程和非过程两种方法。具有通讯、模块设计、执行快等优点。
“触发器”是一种强制业务规则和数据完整性的一种类型机制,它是一种特殊类型的存储过程。触发器中的两个虚拟表及SQL-SERVER 2000新应用的INSEAD OF 触发器都是SQL-SERVER中强制业务规则的强有力工具。
总之,SQL-SERVER中的游标、存储过程和触发器是SQL-SERVER数据库灵魂的三个重要方面。另外,它们 “高效处理数据库中数据”的方法,是学习其它数据库的一个重要启示!
相关文章推荐
- SQL-SERVER数据库中的游标、存储过程和触发器
- 数据库基础知识点二:PLSQL、游标、程序包、存储过程、触发器,序列,视图,索引,数据字典
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 从已有数据库生成脚本来获得生成数据表、视图、函数、存储过程以及触发器的SQL语句
- 用游标遍历某台服务器下所有的数据库中 汲及到某个关键词的 所有存储过程及自定义函数
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
- 数据库的几个问题存储过程触发器函数创建以及sql优化
- 从 syscomments 取系统存储过程、用户存储过程、视图、函数、触发器等对象的sql定义语句
- SQL Server AB表同结构的简单数据同步存储过程
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- 利用批处理 存储过程和数据转换服务包执行sqlserver Agent下的Job
- sql生成(c#调用存储过程返回数据表)代码的存储过程
- sql处理数据库锁的存储过程
- Oracle 存储过程及函数中游标+动态的sql处理
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- 数据库存储过程中定义一个变量,通过sql语句在数据表中获取这个变量值的方法。
- Oralce数据库之存储过程、存储函数、触发器和数据字典
- SqlServer2005(2000)数据库字典,将表数据生成SQL脚本的存储过程 (转)
- 生成sql server 数据库 脚本的 存储过程和调用
- MySQL 存储过程游标嵌套,触发器调用存储过程