根据另一个表中的更改从一个表更新列

时间:2013-03-01 21:27:26

标签: c# visual-studio-2010 sql-server-ce

请原谅我,因为我是数据库新手。我有一个食谱表格,用户可以输入几种成分和食谱名称。在此表单中,我有以下表格: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服务器,但我似乎无法让它们中的任何一个工作。

建议?

1 个答案:

答案 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