【问题标题】:SQL Server : trigger on not inserted rowSQL Server:在未插入的行上触发
【发布时间】:2015-02-21 08:26:09
【问题描述】:

我有两张桌子。我在表 A 上定义了一个触发器,当将一行插入表 A 时,它会更新表 B。

如果将具有特定值的数据发送到表 A,我想阻止插入表 A 并允许在表 B 中更新。

谁能帮帮我?

【问题讨论】:

  • 代替插入

标签: sql-server triggers insert


【解决方案1】:

使用INSTEAD OF触发器:

CREATE TABLE [dbo].[Test1] ( [id] [INT] NULL )
ON  [PRIMARY]

GO

CREATE TABLE [dbo].[Test2] ( [id] [INT] NULL )
ON  [PRIMARY]

GO

CREATE TRIGGER trInsert ON dbo.Test1
    INSTEAD OF INSERT
AS
    BEGIN

        --Insert particular data to Test2
        INSERT  INTO dbo.Test2
                ( id )
                SELECT  *
                FROM    Inserted
                WHERE   id = 2

        --Insert the rest of data to Test1    
        INSERT  INTO dbo.Test1
                ( id )
                SELECT  *
                FROM    Inserted
                WHERE   id <> 2
    END
GO


INSERT  INTO dbo.Test1
        ( id )
VALUES  ( 1 ),
        ( 2 ),
        ( 3 )

SELECT  *
FROM    dbo.Test1
SELECT  *
FROM    dbo.Test2

输出:

Test1:

id
1
3

Test2:

id
2

【讨论】:

  • 但在此解决方案中,插入查询重复了 test1。有没有更好的办法?
  • @FariborzDehghani,您可以编写用于插入的存储过程并检查IF CONDITION THEN INSERT INTO B ELSE INSERT INTO A
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 2019-07-14
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多