0

我有 3 张桌子。我同时创建一个任务并上传一个资源。数据保存在两张表中——一张用于任务信息,一张用于资源。

我正在尝试将两个表的主键插入到第三个表中。第一个表被调用Tasktask_id作为主键,task_name并且task_description. 第二个是 -Resourceresource_id作为主键和resource_name. 两个 id 都有自动增量选项,所以当我在表中输入数据时,我不填写 id。

我想插入task_idresource_id进入第三个名为Task_resource. 它有一个主键task_resource_id(同样带有自动增量选项)。

问题是怎么做,因为我不知道身份证?

这样做的原因是一个任务可以有很多资源,在第三个表中我可以组合它们,因此搜索它们(例如类似的东西SELECT data from the other 2 tables WHERE task_id=1)。

我有一个 asp.net Web 应用程序和一个 mssql 数据库。我用c#。

我知道一个可能的解决方案可能是将一个名为的列插入task_idResource引用task_idin的表中Task

但是话又说回来,如何插入该ID,因为我不知道?

4

2 回答 2

2

在第一个表上执行插入,然后从查询中返回 scope_identity()。那么当你插入第二个表时你有ID吗?或者,如果您使用的是 LINQ

//create the object
Task task = new Task{

task_name = src.taskName,
task_description = src.taskDescription

}

context.Tasks.InsertOnSubmit(task);
context.SubmitChanges();

//do second insert
Int32 taskIDFromLastInsert = task.task_id;

Resource res = new Resource{

resource_name = scr.ResourceName,
task_id = taskIDFromLastInsert // optional if you want to change your structure

}

context.Resources.InsertOnSubmit(res); context.SubmitChanges();

Int32 resourceIDFromLastInsert = resource_id;

如果您真的想插入第三张表,您现在拥有两个 ID

这是一种引用数据的干净方式

插入后对数据运行查询。

于 2012-12-04T11:34:53.110 回答
1

你应该使用

SET IDENTITY_INSERT

于 2012-12-04T11:30:19.133 回答