SQL触发器问题:为什么这是一个语法错误?
我想为Sybase创建一个触发器,但它显示了一个错误 我想做的是,当对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);
[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