一、存储过程
1.1、基本概念
实际上是存储在数据库中供所有用户程序调用的子程序。
好处:允许模块化程序设计;改善性能;减少网络流量;增强应用程序的安全性。
1.2.1、创建
CREATE PROCEDURE procedure_name
@ parame_name data_type
AS
sql语句
1.2.2、执行存储过程
EXECUTE procedure_name 参数
例:带输入参数和一个输出参数的存储过程。建立统计指定类型商品的种类数的存储过程,并将统计结果作为输出参数返回。
CREATE PROCEDURE p_GoodsCount
@ class varchar(20), @ count int output
AS
SELECT @ count=count(*) FROM Table_Goods a
JOIN Table_GoodsClass b ON a.GoodsClassID = b.GoodsClassID
WHERE GoodsClassName = @ class
执行此存储过程
DECLARE @ c int
EXEC p_GoodsCount '服装' , @ c output
PRINT @ c
1.2.3、删除存储过程
DROP PROCEDURE procedure_name
二、用户定义函数
它和存储过程类似,但是函数必须有一个RETURN子句,用于返回函数值。
SQL Server2008支持两类:标量函数和表值函数。
2.1.1、创建标量函数
CREATE FUNCTION function_name
(@ parema_name data_type)
RETURNS returndata_type
AS
BEGIN
function_body
RETURN scalar_expression
END
2.1.2、创建内联表值函数
CREATE FUNCTION function_name(@ pareme_name data_type)
RETURNS table
AS
RETURN (select_statement)
2.2 删除
DROP FUNCTION function_name
三、触发器
3.1、基本概念
触发器是一种特殊的存储过程,它不需要用户直接调用,在对表中的数据进行UPDATE、INSERTE或DELETE操作时自动触发。
保证了业务规则和数据完整性,完成比CHECK约束更加复杂的数据约束。
在触发器中,用户执行数据的更改操作时,SQL Server 自动创建和管理着两张表:INSERTED 和 DELETED 表。
DELETED表用于存储被更改的所有行在更改前的数据(按行进行);
INSERTED表用于存储INSERT和UPDATE语句所影响的行的副本,是更改后的数据的副本。
三种类型:DML、DDL和登录触发器。
3.2、创建DML触发器
CREATE TRIGGER trigger_name
ON {table | view}
{FOR | AFTER | INSTEAD OF}
{[INSERT][,] [UPDATE][,] [DELETE]}
AS {sql_statement}
FOR | AFTER 为后触发型触发器,只有引发的SQL语句都成功执行,并且所有的约束检查也成功后,才执行。(不能在视图上定义AFTER触发器),在同一种操作上可以建立多个触发器。
INSTEAD OF 为执行触发器,也叫前触发型触发器。在同一种操作上只能建立一个触发器。
所有的建立和更改数据库以及数据库对象的语句、所有的DROP语句都不允许在触发器中使用。
3.3 删除
DROP TRIGGER trigger_name
四、游标
游标是一个查询结果,游标机制为用户提供了在查询结果集中进行行、列定位的操作,使得人们可以深入到结果集内部进行操作。