请原谅我,因为我是数据库新手。我有一个食谱表格,用户可以输入几种成分和食谱名称。在此表单中,我有以下表格:Recipe{recipeID, recipeName}
RecipeIngredient{recipeID,ingredientID,measurement}
Ingredient{ingredientID, ingredientName}
RecipeIngredients充当一对多关系的中间表(许多成分的一个配方)。我将recipeID作为该表中的外键分配给配方表中的主键recipeID。我认为外键会根据主键更新进行更新,但如果我插入Recipe表,则RecipeIngredients表不执行任何操作。
配方和配料会自动分配ID。我正在尝试将一个配方的ID链接到每个配料的自动分配ID。例如,如果用户输入8种成分,则为每种成分分配唯一的ID。我需要RecipeIngredients表来复制这些ID并将它们与自动分配的配方ID相关联。
我已经尝试了几种基于其他表中更改来更新列的解决方案。我已经尝试修改this MySQL更新语句并修改this SQL服务器,但我似乎无法让它们中的任何一个工作。
建议?
答案 0 :(得分:0)
通常,您需要从第一个插入中获取新的recipeID,然后在插入成分表时使用它。
您是否可以从插入到配方表中访问新插入的recipeID?你是怎么做这个插入的?
这是一个示例存储过程,它进入数据库进行插入/更新并返回id:
CREATE PROCEDURE [dbo].[spAlertCategoryInsUpd]
@AlertCategoryID int,
@AlertID int,
@CategoryID int,
@ScreenSortOrder int
AS
SET NOCOUNT ON
IF EXISTS(SELECT [AlertCategoryID] FROM [dbo].[AlertCategories] WHERE [AlertCategoryID] = @AlertCategoryID)
BEGIN
UPDATE [dbo].[AlertCategories] SET
[AlertID] = @AlertID,
[CategoryID] = @CategoryID,
[ScreenSortOrder] = @ScreenSortOrder
WHERE
[AlertCategoryID] = @AlertCategoryID
SELECT @AlertCategoryID as AlertCategoryID;
END
ELSE
BEGIN
INSERT INTO [dbo].[AlertCategories] (
[AlertID],
[CategoryID],
[ScreenSortOrder]
)
OUTPUT INSERTED.AlertCategoryID AS AlertCategoryID
VALUES (
@AlertID,
@CategoryID,
@ScreenSortOrder
)
;
END