SQL触发器问题:为什么这是语法错误?

时间:2009-04-19 09:39:04

标签: sql database sybase triggers

我想为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*

2 个答案:

答案 0 :(得分:3)

Sybase通过sp_primarykeysp_foreignkey等过程以及声明性SQL约束支持外键和主键。你想要做的就是来自[学生]的[帐户]的外键应该做什么。

“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

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

您尝试使用的符号与SQL标准相比,更接近于Sybase支持的记录。

答案 1 :(得分:1)

Sybase不支持外键吗?