触发器用于防止根据条件插入数据

时间:2014-12-26 16:39:07

标签: sql sql-server tsql triggers

我需要一个触发器来防止某些数据插入表中根据条件,在插入表中的任何行之前就像这段代码一样

create Trigger trigger_name 
on table_name
for insert
AS
Begin
if (true)
    insert into table_name values ()
End

3 个答案:

答案 0 :(得分:1)

Instead of Trigger(使用INSTEAD OF CLAUSE)

  

此类型的触发器在SQL Server开始执行之前触发   解雇它的行动。这与AFTER触发器不同   在导致它发射的动作之后发射。我们可以有一个INSTEAD   在成功执行的表上插入/更新/删除触发器   但不包括对表格的实际插入/更新/删除。

<强>语法:

CREATE TRIGGER trigger_nameON {table|view} 
[WITH ENCRYPTION|EXECUTE AS] 
{FOR|AFTER|INSTEAD OF} 
{[CREATE|ALTER|DROP|INSERT|UPDATE|DELETE ]} 
[NOT FOR REPLICATION] 
AS sql_statement [1...n ] 

触发应该像

CREATE TRIGGER trigger_name 
ON table_name 
instead OF INSERT 
AS 
    BEGIN 
        IF (true) 
            INSERT INTO table_name VALUES () 
    END

答案 1 :(得分:0)

使用Instead Of Insert triggerexists运算符验证符合条件的行

CREATE TRIGGER trigger_name
ON table_name
Instead OF INSERT
AS
  BEGIN
      INSERT INTO table_name
      SELECT *
      FROM   inserted
      WHERE  EXISTS (SELECT 1
                     WHERE  condtion = true)
  END 

答案 2 :(得分:0)

您是否尝试使用检查约束而不是触发器? 这是他们的预期目的。应用简单的条件来防止插入/更新不符合业务逻辑的数据。

http://www.techonthenet.com/sql_server/check.php