在另一个插入中使用触发器中的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. TranslationKey表上创建另一个触发器(这很简单)
  2. 使用OUTPUT关键字(我将对此进行详细说明)

声明一个表变量,并使用OUTPUT关键字获取新插入的IDs。然后在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

最新更新