Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL触发器问题:为什么这是一个语法错误?_Sql_Database_Sybase_Triggers - Fatal编程技术网

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

SQL触发器问题:为什么这是一个语法错误?,sql,database,sybase,triggers,Sql,Database,Sybase,Triggers,我想为Sybase创建一个触发器,但它显示了一个错误 我想做的是,当对[student]表执行删除操作时,检查是否有与[account]上的student相关的记录,如果有,则引发异常 Sybase似乎缺乏支持。他们的官员似乎不是要拜访的人 *CREATE TRIGGER AccountChecker BEFORE DELETE ON student REFERENCING OLD AS old_student FOR EACH ROW BEGIN DECLARE @acc CHAR(4);

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

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

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*

Sybase不支持外键吗?

Sybase不支持外键吗?

Sybase支持外键和主键,都是通过
sp_primarykey
sp_foreignkey
等过程以及声明性SQL约束实现的。您所要做的正是来自[account]引用[student]的外键应该做的

Sybase SQL用户指南(Adaptive Server 15,如果有必要)说明了一个“delete restricted”触发器(缩进略有不同):

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


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

Sybase通过
sp_primarykey
sp_foreignkey
等过程以及声明性SQL约束支持外键和主键。您所要做的正是来自[account]引用[student]的外键应该做的

Sybase SQL用户指南(Adaptive Server 15,如果有必要)说明了一个“delete restricted”触发器(缩进略有不同):

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


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

它显示了什么错误?我使用的是Sybase ISQL,它在第14行的开始处附近显示,但是如果我删除@acc IS NOT NULL BEGIN SIGNAL acc\u NOT\u NULL END它仍然错误,如果我从第9行删除(从选择开始…)对于第15行,它成功了。更正:它在第14行的开始附近显示错误,它显示了什么错误?我使用的是sybase ISQL,它在第14行的开始附近显示错误,但如果我删除@acc不为空,则开始信号acc\U不为空结束,则仍然错误,如果我从第9行(从选择开始…)删除到第15行,它成功了。正确:它在第14行的开始处显示错误
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