4

我发现在 sql server 中只有 after 而不是 triggers。并且修改插入的 pesudo 表中的值是非法的。然后我的问题出现了:如果我想检查将要插入到我的表中的数据,并且当数据违反我的约束时,我应该将这些值修改为默认值,该怎么做?插入后如何更新值?但是,如果我的表中没有唯一的主键或列,我如何找到刚刚插入的行然后更新它?

4

1 回答 1

11

基本上,使用INSTEAD OF INSERT触发器,您可以实现您要查找的内容 - 只需从伪表中读取数据,对其进行INSERTED修改,然后将其插入到表中

所以你的触发器看起来像这样:

CREATE TRIGGER YourTrigger ON dbo.YourTable    
INSTEAD OF INSERT
AS
    SET NOCOUNT ON

    -- do the INSERT based on the INSERTED pseudo table, modify data as needed
    INSERT INTO dbo.YourTable(Col1, Col2, ....., ColN)
      SELECT 
          Col1, 2 * Col2, ....., N * ColN
      FROM 
          INSERTED

当然,您也可以在WHERE该语句中添加例如子句形式的检查,SELECT .... FROM INSERTED例如忽略某些行 - 可能性是无穷无尽的!

于 2012-05-12T09:45:19.233 回答