ASA触发器怎样快速获取新增加行的信息
本帖最后由 jiang396 于 2013-05-27 15:27:43 编辑 ms sql里面的对于新增加的行(如logid),可以用一个inserted来获得,请问ASA中怎样获得新增加行(然后找到logid字段)
CREATE TRIGGER trig_users_insert
ON users
FOR INSERT
BEGIN
INSERT INTO UserRight(LogID, ResID)
SELECT Inserted.LogID, Resources.ResID //inserted
FROM Inserted, Resources //inserted系统逻辑表
ORDER BY LogID, ResID
END
GO
1、由组合语句构成 与存储过程具有同样的能力及特点 触发器不能包括参数和返回结果集
2、语法
CREATE TRIGGER trigger-name trigger-time trigger-event
FOR EACH [ROW
[解决办法]
STATEMENT]
BEGIN
...;
...;
END
3、建立触发器的用户应具有以下权限 RESOURCE 权 对所需表的ALTER 权限
插入型触发器
1、实例 — 禁止增加一个已被解雇的新职员
CREATE TRIGGER ai_employee AFTER INSERT ON employee REFERENCING NEW AS new_emp FOR EACH ROW
BEGIN
IF new_emp.termination_date IS NOT NULL
THEN
RAISERROR 30000 'You cannot hire an employee you have already fired';
END IF;
END
删除型触发器
1、实例 — 禁止删除一个还未期满的雇员
CREATE TRIGGER d_employee BEFORE DELETE ON employee REFERENCING OLD AS cur_emp FOR EACH ROW
BEGIN
IF cur_emp.termination_date IS NULL
THEN
RAISERROR 30001 'You cannot delete an employee who has not been fired';
END IF;
END
更新型触发器
1、实例 — 职员工资升不许降
CREATE TRIGGER bu_employee BEFORE UPDATE ON employee
REFERENCING NEW AS after_update OLD AS before_update
FOR EACH ROW
BEGIN IF after_update.salary < before_update.salary THEN
RAISERROR 30002 'You cannot decrease a salary';
END IF;
END
列级更新触发器
1、实例 — 工资只可增加,仅当更新salary列时才激发触发器
CREATE TRIGGER ub_empsal BEFORE UPDATE OF salary ON employee
REFERENCING NEW AS after_update OLD AS before_update
FOR EACH ROW
BEGIN
IF after_update.salary < before_update.salary
THEN RAISERROR 30002 'You cannot decrease a salary';
END IF;
END
删去一个触发器
1、语法
DROP TRIGGER trigger-name
2、实例
DROP TRIGGER mytrigger
3、要求对表有 ALTER 权限
触发器的执行时机
1、当数据库出现相应动作时自动被执行
2、操作次序:
BEFORE 触发器
参照动作
操作
AFTER 触发器
对ASE 触发器兼容性的考虑
1、回滚
Adaptive Server Anywhere不支持触发器内的回滚
在ASE(或 T-SQL)的触发器中可包含回滚
触发器与激发该触发器的操作是原子化的,如果此触发器失败则该操作也自动失败。
2、嵌套
一个触发器所执行的动作导致激发另一个触发器
Adaptive Server Anywhere 对嵌套层数未作明确限制
除非Adaptive Server Anywhere运行资源超出,ASE 给出可配置的最大限制数 缺省值是16
3、递归性
Adaptive Server Anywhere触发器可被设置为递归激发
如果一个触发器执行动作会使本身又被激发,则导致递归激发。
缺省情况是off
用IF UPDATE() 来处理递归
在ASE 及与 T-SQL 兼容的触发器中不具有此特点
小结
1、触发器由SQL及流程控制语句构成 ,当触发器所检测的事件发生时自动执行该触发器。
2、在制约复杂的完整性和一致性规则以及实现维持数据间逻辑关系的业务规划时,采用触发器是很有效的。
3、触发器的主要优点是:标准化,高效性和安全性。
4、有四类触发器:插入型,删除型,更新型及列级更新型。
5、行级触发器的执行时机是在触发器操作所影响的每一行在被改变之前或其后。
6、建立触发器用命令CREATE TRIGGER,删除触发器使用命令 DROP TRIGGER。它们都要求用户具有适当的权限。
原文,参考如下链接
http://www.chinaunix.net/old_jh/21/21696.html
[解决办法]
anywhere数据库错误消息速查手册
http://download.sybase.com/pdfdocs/awg0901c/dberzh9.pdf