SQL Server触发器(插入前)验证数据?

时间:2018-04-25 20:26:32

标签: sql-server sql-server-2008

我们在仓库中使用了一个应用程序来跟踪哪些拣货员正在拣选哪些订单。我们经常有一个实例,其中插入表中的订单号不是实际的订单号。虽然我们将对应用程序进行一些验证,但我想知道如何在表上放置触发器以防止在订单号错误时写入记录。

例如:

  • 在插入之前,当len(ordernum)<> ' 6'然后删除记录。
  • else插入表1

2 个答案:

答案 0 :(得分:0)

INSTEAD OF触发器导致它们的源DML操作跳过,它们只是执行它们内部提供的代码。根本不会发生实际的插入,删除或更新操作。但是,它们具有模拟DML操作的关联插入和删除表。插入和删除的表广泛用于触发器内的操作

    --Instead of Trigger
    CREATE TRIGGER BeforeDelete_Trigger ON [dbo].[Order1]
    INSTEAD OF INSERT AS
    BEGIN
     IF (SELECT * FROM Order1 WHERE len(ordernum) <> '6')
     THEN 
    INSERT INTO Order1;
   ELSE
    INSERT INTO Order2 (col 1, col 2) VALUES (inserted.col1, inserted.col2);
     END;
     GO

答案 1 :(得分:-1)

你可以创建一个而不是触发器:

- 在表格上创建一个INSTEAD OF INSERT触发器:

CREATE TRIGGER InsteadTrigger on dbo.table1
INSTEAD OF INSERT
AS
BEGIN
  if  len(inserted.ordernum)= 6
     insert into table1 (ordernum,col1, col2) values (inserted.ordernum,inserted.col1, inserted.col2)
--rows that dont have a ordernum length of 6 are not inserted

end