2014-05-20 77 views
0

当我插入到第一个表中时是否可以填充第二个表?插入到一个表中,将ID插入到第二个表中

将帖子插入到table1 - > table 2列中,收到table1帖子的唯一ID。

我到目前为止,我在正确的轨道上?

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

这只是你在数据库上执行你想要的约束。现在你需要编写代码。如果您遇到问题/问题,请在此提出您的问题。但是只有在你编写代码之后。 –

回答

5

很多方法:

  1. insert触发
  2. 第一insert后读取SCOPE_IDENTITY(),并用它做了第二次
  3. 使用output条款执行插入

示例:

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 
0

我能想到的唯一的事情就是您可以使用触发器来实现此目的。没有什么“内置”SQL Server的,可以做到这一点。为什么不从你的.NET代码中完成呢?

0

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

SQL Server 2008 - Help writing simple INSERT Trigger

一个谨慎的词,这会做更新的新表,你写任何的C#代码之外的所有逻辑,这听起来不错不必预先管理它,但是你也会失去对何时发生的控制。

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

虽然我不知道你用什么做你插入假设它是一个SQL命令你可以回到上使用SCOPE_IDENTITY插入标识列的ID,发现这里

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

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