关于嵌套触发
我有两个表:eq表和server表
eq表有num(关键字)、state等几个字段
server表有id(关键字)、num(非关键字)、state、acceptdate等几个字段
我在server表设置了一个UPDATE触发器,代码如下:
CREATE TRIGGER [serupdate] ON dbo.server_t
FOR UPDATE
AS
declare @xh int,@bh char(10),@accdate datetime,@st nchar(10)
select @bh=num from updated
select @accdate=max(acceptdate) from server_t where num=@bh
select @st=state from server_t where num=@bh and acceptdate=@accdate
update equipment set state=@st where num=@bh and state!=@st
作用是当server表里的记录更新的时候,保存被更新记录的num字段值到bh里,
找出表中num字段等于此值并且acceptdate为最大的那条的state值。用此
state值更新eq表中num字段等于bh的那条记录的state值。
现在我希望建立一个eq表和server表之间的关系:
主键为eq.num,外键为server.num。目的是对server表的num字段进行级联更新
(这也是server表的num字段的唯一更新方式,我的前台程序不会提供单独更新
server表的num字段的途径)。但是在保存时报错:
“'eq' 表成功保存
'server' 表
- 不能创建关系 'FK_server_eq'。
ODBC 错误: [Microsoft][ODBC SQL Server Driver][SQL Server]将 FOREIGN KEY
约束 'FK_server_eq' 引入表 'server' 中将导致循环或多重级联路径。
请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY
约束。[Microsoft][ODBC SQL Server Driver][SQL Server]未能创建约束。
请参阅前面的错误信息。”
我知道这肯定是嵌套触发引起的,(我的“服务器设置->允许激发会激发其它触发
器”选项是设置的允许嵌套。)请问高手该怎样解决,谢谢!!
问题点数:100、回复次数:5Top
1 楼w_rose(w_rose)回复于 2003-12-02 17:29:57 得分 100
我知道这肯定是嵌套触发引起的
--------------------------------------->
不是。
SQL Server不允许你定义两个表同时两个表中的外键指向对方。
在建立表结构时去掉一方的外键,该而使用触发器来实现数据记录的关联。Top
2 楼w_rose(w_rose)回复于 2003-12-02 17:37:28 得分 0
另外,你的触发器写法有问题:
1. 不能处理多条记录的情况。“select @bh=num from updated”只能得到updated的所有记录的最后一条。
2. 累赘。这样的逻辑,只要一条SQL语句就可以写好了,比你的应该简短、清楚。Top
3 楼txlicenhe(马可)回复于 2003-12-02 17:43:45 得分 0
你这不是SQL Server的触发器吧?
CREATE TRIGGER [serupdate] ON dbo.server_t
FOR UPDATE
AS
declare @xh int,@bh char(10),@accdate datetime,@st nchar(10)
select @bh=num from updated -- 有这个表吗?(有也只能取到一条)
select @accdate=max(acceptdate) from server_t where num=@bh
select @st=state from server_t where num=@bh and acceptdate=@accdate
update equipment set state=@st where num=@bh and state!=@st
(!=是什么用法,SQL中用 <>Top
4 楼firefly_xu(萤火虫)回复于 2003-12-02 17:51:37 得分 0
w_rose(w_rose)
”这样的逻辑,只要一条SQL语句就可以写好了,比你的应该简短、清楚。“
请问怎么实现?Top
5 楼firefly_xu(萤火虫)回复于 2003-12-02 17:53:55 得分 0
确实,此触发器不能处理多条记录的情况。请问高手有处理多条记录的方法吗?Top




