1

这是我们的 3 张桌子。我们想将一个新的配方放入表格中。用户会得到一个屏幕,他们可以在其中填写食谱名称、方法,并且他们可以从下拉菜单中选择 3 种成分。我们正在使用 C# 在 Visual Studio 中使用 asp.net。

因此,当用户填写每个字段时,RecipeName 和 Method 将被添加到 Recipes 表中。然后必须将属于配方的成分添加到成分配方表中。

怎么写这个查询,因为我们不知道RecipeId,因为这个自动增量?

食谱

RecipeId     RecipeName                Method
1            Bacon and Brocilli        Bake the bacon and cook the brocolli
2            Rice with chicken         Cook the rice and bake the chicken
4            Potato and Carrot         Cook the potatoes and the carrots
6            Rice Chicken and Carrot   Cook everything

原料

IngredientId     IngredientName       IngredientCategorie
2                Bacon                3
3                Brocolli             2
4                Potato               1
5                Chicken              3
6                Carrot               2
7                Rice                 1

成分配方

RecipeUniqueID   RecipeId    IngredientId
1                   1         2
2                   1         3
3                   2         5
4                   2         7
5                   4         4
6                   4         6
7                   1         4
8                   2         6
9                   4         2
10                  6         7
11                  6         6
12                  5         5
4

4 回答 4

3

首先保存配方和成分,以便它们具有有效的 ID,然后保存关联。

于 2013-05-20T03:44:50.280 回答
0

添加配方后,您应该使用SCOPE_IDENTITYorOUTPUT子句来获取新的 RecipeID。

参考:获取插入行标识的最佳方法?

于 2013-05-20T04:10:12.377 回答
0

假设您使用的是 SQL Server 2005 或更高版本,您可以OUTPUT在 INSERT 语句中使用子句。OUTPUT 子句返回您需要的有关插入的行的任何信息。

我认为该OUTPUT子句是多用户数据库插入中最安全的机制,而不是使用SCOPE_IDENTITYIDENT_CURRENT 参见此处了解如何在 INSERT 语句中使用 OUTPUT 子句

另请参阅此Stackoverflow 线程上关于 OUTPUT 子句优于 SCOPE_IDENTITY 和 @@IDENTITY 优势的很好解释

于 2013-05-20T04:26:44.007 回答
0

尝试类似的东西

调用存储过程插入配方

SP Code For insert recipe Start Insert into recipes values('','') select @Scope_Identity() // 这将返回最后一个自动递增的值,这将是您的配方 ID 插入配方结束的 SP 代码

现在,当您拥有食谱 ID 时,您可以传递它,以映射带有成分的食谱。

希望这可以帮助

于 2013-05-20T04:52:00.517 回答