0

我想为 Sybase 创建一个触发器,但它显示一个错误。

我要做的是,当对[student]表进行删除操作时,检查 [account] 上是否有与学生相关的记录,如果有,则引发异常。

Sybase 似乎缺乏支持。他们的官员似乎没有人来参观。

*CREATE TRIGGER AccountChecker
BEFORE DELETE ON student
REFERENCING OLD AS old_student
FOR EACH ROW 
BEGIN
DECLARE @acc CHAR(4);
DECLARE @acc_not_null EXCEPTION FOR SQLSTATE '99999';

SELECT @acc=account.account_number FROM account
WHERE account.student_id = old_student.student_id;

   IF @acc IS NOT NULL
   BEGIN
    SIGNAL acc_not_null
   END

END*
4

2 回答 2

3

Sybase 支持外键和主键,既可以通过过程,sp_primarykeysp_foreignkey可以通过声明性 SQL 约束。您正在寻求做的正是来自 [account] 引用 [student] 的外键应该做的事情。

Sybase SQL 用户指南(Adaptive Server 15,如果重要的话)说明了一个“删除受限”触发器(缩进略有不同):

create trigger deltitle
    on titles
    for delete
    as
       if (select count(*)
               from deleted, salesdetail
               where salesdetail.title_id =
               deleted.title_id) > 0
       begin
           rollback transaction
           print "You cannot delete a title with sales."
       end

我不相信回滚是个好主意。例外可能更好。

您尝试使用的表示法比记录在案的 Sybase 支持的表示法更接近 SQL 标准。

于 2009-04-19T13:43:45.580 回答
1

Sybase 不支持外键吗?

于 2009-04-19T13:00:42.050 回答