触发器的问题!(50分)

  • 主题发起人 主题发起人 berg
  • 开始时间 开始时间
B

berg

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个表(T_ds)上写了一个触发器
CREATE TRIGGER [TRIGGER NAME] ON [t_ds]
FOR DELETE
AS
delete from t_ds
go
不知道怎么调用,请指点!(sql server数据库)
还有怎么来查看表中所有的触发器?
 
触发器不用你手工调用,在你的语句中(for delete)处要写得更清楚,这样的写法有疑问。
如:before delete on each row
在外部对表进行删除动作时,触发器就会自动运行。
而且你的触发器内容很奇怪,不知道是想达到什么目的。

通过sql server的管理工具可以看到一张表的所有有关触发器。
 
armyjiang,能给个触发器的例子吗
 
CREATE TABLE depart
(zf CHAR(3),
dw CHAR(20))
/
CREATE TABLE employee
(xm CHAR(20),
dw CHAR(20))
/
CREATE OR REPLACE TRIGGER tridepart
BEFORE DELETE
ON depart
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
delete employee where dw = :old.dw;
commit;
END;
/
insert into depart values('111','123');
insert into depart values('111','234');
insert into depart values('111','345');
insert into depart values('222','456');
insert into depart values('222','567');
insert into employee values('aaa','123');
insert into employee values('bbb','234');
insert into employee values('ccc','345');
insert into employee values('ddd','456');
insert into employee values('eee','567');

SELECT zf, dw FROM depart;
ZF DW
----------------
111 123
111 234
111 345
222 456
222 567

SELECT xm, dw FROM employee;
XM DW
-------------------------
aaa 123
bbb 234
ccc 345
ddd 456
eee 567

delete depart where zf='222';

SELECT zf, dw FROM depart;
ZF DW
----------------
111 123
111 234
111 345

SELECT xm, dw FROM employee;
XM DW
-------------------------
aaa 123
bbb 234
ccc 345


 
这是例子,由ERWIN自动生成的

CREATE OR REPLACE TRIGGER tI_AC_USER_W after INSERT on AC_USER_W for each row
-- ERwin Builtin Tue Nov 26 09:40:05 2002
-- INSERT trigger on AC_USER_W
declare numrows INTEGER;
begin
/* ERwin Builtin Tue Nov 26 09:40:05 2002 */
/* AC_CUST_W R/347 AC_USER_W ON CHILD INSERT SET NULL */
update AC_USER_W
set
/* AC_USER_W.CUST_ID = NULL */
AC_USER_W.CUST_ID = NULL
where
not exists (
select * from AC_CUST_W
where
/* :new.CUST_ID = AC_CUST_W.CUST_ID */
:new.CUST_ID = AC_CUST_W.CUST_ID
) and
/* AC_USER_W.USER_ID = :new.USER_ID */
AC_USER_W.USER_ID = :new.USER_ID;


-- ERwin Builtin Tue Nov 26 09:40:05 2002
end;

 
触发器,就是一触即发。for delete 就是说 只要对此表有delete操作就会执行“触发器”。
在触发器中可以写保证数据结构完整的事件,例armyjiang的。但armyjiang的例子是有误的(业务),应当是这样考虑:当删除某个员工时,与此员工相关的单据也要删除(严格来说单据是不允许随意删除的)。
 
SQL Server 有系统触发器,可以参照
 
好久没来了,发分了
 
后退
顶部