Sql 在另一个插入中使用触发器的插入信息

Sql 在另一个插入中使用触发器的插入信息,sql,sql-server,triggers,sql-insert,Sql,Sql Server,Triggers,Sql Insert,我在insert之后编写一个触发器,它使用插入的数据在另一个表中插入数据。这部分,我明白了 然后,我想使用新插入的数据,插入另一个表 CREATE TRIGGER [dbo].[tr_Subsite_Insert] ON [dbo].[Subsite] AFTER INSERT AS BEGIN INSERT INTO TranslationKey SELECT 'base.' + inserted.[name] + '.' + sst.name FR

我在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

如何从第一次插入中获取值,以便在第二次插入中使用

这里有两个选项:

  • TranslationKey
    表上创建另一个触发器(这很简单)
  • 使用
    OUTPUT
    关键字(我将对此进行详细说明)
  • 声明一个表变量并使用
    OUTPUT
    关键字获取新插入的
    ID
    s。然后在
    交叉连接中使用该临时表。以下是一个例子:

    /*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
    

    谢谢,我马上去检查第二个选项。关于第一个选项:是的,这很简单,但问题是我在其他情况下使用另一个表,与此表无关我有一个错误:(用法语悲伤地说):
    Msg 206,级别16,状态2,过程tr_SubSite_Insert,第18行Conflit de types d'opérandes:int est compatible avec uniqueidentifier
    ,意思是:“操作数类型冲突:int与uniqueidentifier不兼容”。知道这是从哪里来的吗?@Jordumus,我不知道
    TranslationKey
    表中
    ID
    列的类型,所以不要用
    DECLARE@t table(ID UNIQUEIDENTIFIER)
    替换为适当的类型
    DECLARE@t table(ID propertype of ID column)
    是的,对不起,在我的头撞了三次墙后,我自己发现了那个。在提出问题之前,我真的应该三思而后行