带条件的SQL Server触发器
我想为SQL Server 2008创建一个带有条件的带条件的SQL Server触发器,sql,sql-server-2008,triggers,constraints,Sql,Sql Server 2008,Triggers,Constraints,我想为SQL Server 2008创建一个带有条件的INSERT触发器 例如,我有一个包含两种类型事务a和B的事务表。 我希望在只有一个类型的insert事务时触发触发器 我该怎么做 如果可能的话,我会很高兴得到你的帮助和榜样 谢谢 表格: Txn Txn Date --------------------------- A 2018-08-01 01:05:00 A 2018-08-01 01:05:01 B 2018-08-01 01:05:05
INSERT
触发器
例如,我有一个包含两种类型事务a和B的事务表。
我希望在只有一个类型的insert事务时触发触发器
我该怎么做
如果可能的话,我会很高兴得到你的帮助和榜样
谢谢
表格:
Txn Txn Date
---------------------------
A 2018-08-01 01:05:00
A 2018-08-01 01:05:01
B 2018-08-01 01:05:05
B 2018-08-01 01:05:09
A 2018-08-01 01:05:15
B 2018-08-01 01:05:41
我对mysql有一个想法:您可以检查在单列上的insert条件下如何在新表中的单行上执行触发器insert,例如: 分隔符$$ 使用
测试$$
在testtable
INSERT之后创建触发器TestTrigger
每行开始
如果NEW.TXN='A',则
插入testb
(columna,columnb)值(1,'Suresh');
如果结束;
结束;
$$
定界符
#
试验台结构如下所示:
创建表testtable
(
txn
BIGINT(12)默认值“0”,
txn\u日期
DATETIME默认为空,
键ind_msisdn
(txn
)
) ;
创建表testb
(
columna
INT(11)默认为空,
columnb
VARCHAR(30)默认值“”
) ; 这有点复杂。您需要一个而不是触发器
create trigger trig_transactions_type on transactions
instead of insert as
begin
if (not exists (select 1
from inserted i
where type = 'B'
)
)
begin
raiseerror ('Type "B" is required', 10, 1)
rollback transaction;
end;
else
begin
insert into transactions (type, txn_date, . . .)
select type, txn_date, . . .
from inserted;
end;
end;
分隔符
和每行的告诉我们,不管SQL的这种变体是什么,它都不是T-SQL,因为问题被标记了,所以OP会寻找T-SQL。INSERT
s不局限于一次只插入一行。有人可以很容易地编写一个插入行组合的INSERT
,其中一些行是a
,一些行不是。在SQL Server中,触发器对每条语句触发一次,而不是对每行触发一次。您需要编写一个触发器来正确处理这些多行,并以基于集合的方式处理a
行。因为我们不知道你想用它们做什么,所以这里很难给出具体的建议。我需要一个基本的触发器结构如何写这个条件。我检查过的所有论坛都没有找到一个可以学习的例子,也许是这样,但我总是将任何只适用于单行插入的触发器描述为断开。我将给触发器一个勉强通过的标记,它显式地检查多行并用一个错误退出。但是,任何一个触发器在面对多行时默默地做了错误的事情,只能被描述为已损坏。你能举一个例子说明如何使用未损坏的方法来编写它吗?