0

请原谅我,因为我是数据库新手。我有一个食谱表格,用户可以在其中输入几种成分和食谱名称。使用此表格,我有以下表格:Recipe{recipeID, recipeName} RecipeIngredient{recipeID,ingredientID,measurement} Ingredient{ingredientID, ingredientName}

RecipeIngredients 充当一对多关系的中间表(一个配方对许多成分)。我将 recipeID 作为该表中的外键分配给配方表中的主键 recipeID。我认为外键会根据主键更新进行更新,但如果我将 RecipeIngredients 表插入到 RecipeIngredients 表中,则不会执行任何操作。

配方和配料自动分配 ID。我正在尝试将一个配方的 ID 链接到每种配料的自动分配 ID。例如,如果用户输入 8 种成分,则会为每种成分分配一个唯一 ID。我需要RecipeIngredients 表来复制这些ID 并将它们与自动分配的Recipe ID 相关联。

我已经尝试了几种解决方案来根据其他表中的更改来更新列。我试过修改这个MySQL 更新语句并修改这个SQL 服务器,但我似乎无法让它们中的任何一个工作。

建议?

4

1 回答 1

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
于 2013-03-01T21:39:39.980 回答