0

私はデータベースに慣れていないので、私を許してください。ユーザーがいくつかの材料とレシピ名を入力できるレシピフォームがあります。このフォームでは、次のテーブルがあります。Recipe{recipeID, recipeName} RecipeIngredient{recipeID,ingredientID,measurement} Ingredient{ingredientID, ingredientName}

RecipeIngredients は、1 対多の関係 (1 つのレシピと多くの材料) の中間テーブルとして機能します。そのテーブル内の外部キーとしてのレシピ ID を、レシピ テーブルの主キーであるレシピ ID に割り当てました。主キーの更新に基づいて外部キーが更新されると思っていましたが、Recipe テーブルに挿入すると、RecipeIngredients テーブルは何もしません。

レシピと材料には自動的に ID が割り当てられます。1 つのレシピの ID を、各材料の自動割り当て ID にリンクしようとしています。たとえば、ユーザーが 8 つの食材を入力すると、それぞれの食材に一意の ID が割り当てられます。これらの ID を複製し、自動割り当てされたレシピ ID に関連付けるには、RecipeIngredients テーブルが必要です。

他のテーブルの変更に基づいて列を更新するためのいくつかのソリューションを試しました。このMySQL update ステートメントを変更し、このSQL サーバーも変更しようとしましたが、どちらも機能しないようです。

提案?

4

1 に答える 1

0

一般に、最初の挿入から新しいレシピ ID を取得し、成分テーブルに挿入するときにそれを使用する必要があります。

レシピ テーブルへの挿入から新しく挿入されたレシピ ID にアクセスできますか? この挿入はどうですか?

以下は、データベースにアクセスして挿入/更新を実行し、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 に答える