/本博文语法基于SQL SERVER 2008
自建函数FUNCTION
用户自己写的一些SQL代码的组合,从而实现特定的功能
创建函数的语法:
CREATE FUNCTION function_name
(arg1 type1, arg2 type2, arg2 type3)
RETURNS ...
大多数情况下,运行函数会返回一个表,该表可以作为select语句的from子句的对象来进行查询,或者嵌套在where语句之中,从而实现逻辑比较复杂的查询。
存储过程PROCEDURE
涵义:类似于模块的概念,是打包好的代码,用于实现固定的功能,可以通过引用封装好的存储过程来提高开发的效率
创建存储过程
CREATE RROCEDURE procedure_name
AS sql_statements
引用:只要给出参数就能调用封装在存储过程里的语句
CALL procedure_name (arg1, arg2...)
意义:通过封装存储过程,可以大大提高数据库的易用性,尤其是对于不会写SQL代码的人来讲,只要在可视化界面输入参数,就会自动调用存储过程得出结果。
触发器TRIGGER
涵义:对特定表执行特定操作时自动触发——用于强制执行某些规则,保证数据库里的数据安全(比CHECK约束更严格)。比如说有一些关键数据,绝对不允许随便改动,就可以弄一个触发器,只要对这些数据执行insert/update/delete,就马上执行回退操作,撤销该操作。
语法:
CREATE TRIGGER trigger_name
ON table_name/view_name
FOR/AFTER/INSTEAD OF INSERT/UPDATE/DELETE
AS sql_statement
/after: 在指定操作之后触发
/for:默认操作,默认after,用它跟用after没区别
/instead of:不执行该操作而是执行触发器本身
trigger的操作
- 删除:DROP TRIGGER trigger_name
- 查看已有触发器:
SELECT * FROM sysobjects WHERE xtype='TR'
- 修改:
ALTER TRIGGER trigger_name
ON table_name/view_name
FOR/AFTER/INSTEAD OF INSERT/DELETE/UPDATE
AS sql_statement
- 禁用
ALTER TABLE table_name
DISABLE TRIGGER trigger_name/ALL
GO
/ALL 禁用所有
引用的两个特殊表:
inserted:刚刚插入的对象,保存insert和update操作导致的更新的行的复本
deleted:刚刚删除的对象,保存delete和update操作导致的被删除的原来的行的复本