带条件的SQL Server触发器

带条件的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

我想为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
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
行。因为我们不知道你想用它们做什么,所以这里很难给出具体的建议。我需要一个基本的触发器结构如何写这个条件。我检查过的所有论坛都没有找到一个可以学习的例子,也许是这样,但我总是将任何只适用于单行插入的触发器描述为断开。我将给触发器一个勉强通过的标记,它显式地检查多行并用一个错误退出。但是,任何一个触发器在面对多行时默默地做了错误的事情,只能被描述为已损坏。你能举一个例子说明如何使用未损坏的方法来编写它吗?