插入一个表,将ID插入第二个表

时间:2014-05-20 12:53:59

标签: sql sql-server

插入第一个表时是否可以填充第二个表?

将帖子插入table1 - >表2列收到了table1帖子的唯一ID。

到目前为止,我的目标是什么?

    CONSTRAINT [FK_dbo.Statistics_dbo.News_News_NewsID] FOREIGN KEY ([News_NewsID]) REFERENCES [dbo].[News] ([NewsID])

3 个答案:

答案 0 :(得分:6)

很多方法:

  1. insert触发器
  2. 在第一个SCOPE_IDENTITY()之后阅读insert,并使用它做第二个
  3. 使用output子句进行插入
  4. 示例:

    1:

    create trigger Foo_Insert on Foo after insert
    as
    begin
        set nocount on
        insert Bar(fooid)
        select id from inserted
    end
    go
    insert Foo (Name)
    values ('abc');
    

    2:

    insert Foo (Name)
    values ('abc');
    declare @id int = SCOPE_IDENTITY();
    
    insert Bar(fooid)
    select @id
    

    3:

    insert Bar(fooid)
    select id from (
        insert Foo (Name)
        output inserted.id
        values ('abc')) x
    

答案 1 :(得分:0)

我唯一能想到的是你可以使用触发器来实现这一目标。什么都没有"内置"到可以做到的SQL Server。为什么不从.NET代码中执行此操作?

答案 2 :(得分:0)

是的,听起来你想要一个SQL触发器,这将允许你根据一个表上的动作触发逻辑,在数据库中执行其他操作。这是另一篇关于创建简单SQL触发器的文章

SQL Server 2008 - Help writing simple INSERT Trigger

谨慎一点,这将完成更新新表的所有逻辑,在您编写的任何C#代码之外,听起来不需要提前管理它,但您也无法控制何时以及是否发生。

因此,如果您以后需要做一些不同的事情,现在您必须更新常规代码以及触发器代码。在大型系统中,这种类型的逻辑肯定会增长,并成为维护的噩梦。考虑一下,另一种方法是构建一个方法,在将新表插入第一个表后将其添加到新表中。

虽然我不知道你使用什么来做插件,假设它是一个SQL命令,你可以使用Scope_Identity从插件中取回标识列上的ID,在这里找到

How to insert a record and return the newly created ID using a single SqlCommand?

如果是EF或其他ORM工具,他们应该自动更新实体,或者有其他机制来提供这些数据。