我想添加一个触发器而我从未写过一个。 当我更新或向表添加新值时,我想检查是否允许某个值。 我开始触发但我真的不知道如何结束它:
CREATE TRIGGER isAguide
ON tblDiving
AFTER INSERT, UPDATE AS
BEGIN
DECLARE @Found bit
select @Found = count(*)
from tblAuthorized
WHERE diver_number = @id
and level_name = 'guide'
如果@ found = 1,我想允许添加。 @id是用户尝试添加到表中的值。 首先,我如何获得用户在此ID'中输入的值。柱? 第二,我如何继续我写的触发器? 我选择AFTER INSERT后可以吗? 我想添加类似的内容:
if(@found=1) THEN allow adding/updating
else don't allow.
泰
答案 0 :(得分:2)
如果您正在使用AFTER触发器,则可以抛出错误并在找不到ID时回滚事务。
CREATE TRIGGER isAguide
ON tblDiving AFTER INSERT, UPDATE AS
BEGIN
DECLARE @Found bit, @id int;
SET @id = SELECT id FROM inserted;
SET @Found =
(
SELECT count(*)
FROM tblAuthorized
WHERE diver_number = @id
AND level_name = 'guide'
);
IF @Found = 0
THEN
RAISERROR ('The ID entered is not valid', 16, 1);
ROLLBACK TRANSACTION;
RETURN
END;
END;
答案 1 :(得分:1)
我建议创建一个单独的表“Guides”而不是编写触发器,其中潜水员编号作为唯一的列(作为主键)。 将外键引用添加到tblDiving表的相关Id列。
这不仅符合规范化的数据结构,而且速度也会更快。
最后,您需要考虑在将某些行插入tblDiving表后将diver_number的level_name从'guide'更改为不同的情况。您希望应用程序如何做出反应?