在另一个插入中使用来自触发器的INSERT信息

时间:2015-12-15 10:04:41

标签: sql sql-server triggers sql-insert

我正在编写一个触发器after insert,它使用插入的数据在另一个表中插入数据。 这部分,我想出了 但是,我想使用新插入的数据,插入另一个表。

CREATE TRIGGER [dbo].[tr_Subsite_Insert]
   ON  [dbo].[Subsite]
   AFTER INSERT
AS 
BEGIN


    INSERT INTO TranslationKey
        SELECT 'base.' + inserted.[name] + '.' + sst.name FROM SubsiteText sst
            CROSS JOIN inserted

    --Use the result of the above INSERT to insert in another table.
    --Example code below:
    INSERT INTO Translation
       SELECT lng.id, inserted2.id, '' FROM Languages lng
       CROSS JOIN inserted2
    --Obviously, "inserted2" doesn't exist.

END
GO

如何从第一个插入中获取值,以便在第二个插入中使用它们?

1 个答案:

答案 0 :(得分:1)

这里有2个选项:

  1. TranslationKey表上创建另一个触发器(这很简单)
  2. 使用OUTPUT关键字(我会详细说明)
  3. 声明一个表变量并使用OUTPUT关键字来抓取新插入的ID。然后在CROSS JOIN中使用该临时表。这是一个例子:

    /*here you should change UNIQUEIDENTIFIER to 
      actual type of ID column in TranslationKey table*/
    DECLARE @t TABLE ( ID UNIQUEIDENTIFIER )
    
    INSERT  INTO TranslationKey
    OUTPUT  INSERTED.ID
            INTO @t
            SELECT  'base.' + inserted.[name] + '.' + sst.name
            FROM    SubsiteText sst
                    CROSS JOIN inserted
    
    INSERT  INTO Translation
            SELECT  lng.id ,
                    t.ID ,
                    ''
            FROM    Languages lng
                    CROSS JOIN @t t