2013-03-01 5 views
0

Простите меня, поскольку я новичок в базах данных. У меня есть рецепт, в котором пользователь может ввести несколько ингредиентов и название рецепта. С помощью этой формы у меня есть следующие таблицы: Recipe{recipeID, recipeName}RecipeIngredient{recipeID,ingredientID,measurement}Ingredient{ingredientID, ingredientName}Обновление столбца из одной таблицы на основе изменений в другой таблице

RecipeIngredients действует в качестве промежуточного стола для одного до многих отношениях (один рецепт для многих ингредиентов). Я назначил recipeID в качестве внешнего ключа внутри этой таблицы в файле рецепта первичного ключа в таблице рецептов. Я думал, что внешний ключ будет обновляться на основе обновления первичного ключа, но если я вставляю его в таблицу рецептов, таблица RecipeIngredients ничего не делает.

Рецепт и ингредиенты присваиваются идентификаторам автоматически. Я пытаюсь связать идентификатор одного рецепта с автоматически назначенными идентификаторами каждого ингредиента. Например, если пользователь вводит 8 ингредиентов, каждому из этих ингредиентов присваивается уникальный идентификатор. Мне нужна таблица RecipeIngredients, чтобы дублировать эти идентификаторы и связывать их с автоматически назначенным ID рецепта.

Я пробовал несколько решений для обновления столбца на основе изменений в других таблицах. Я пробовал модифицировать this инструкцию по обновлению MySQL, а также изменить сервер SQL this, но я не могу заставить их работать.

Предложения?

ответ

0

В общем, вам нужно будет получить новый рецепт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 
+0

Я получаю RecipeName из текстового поля, то я таблица автоматического присвоения идентификаторов при Я сохраняю рецепт в базе данных. Использование 'string recipeQuery =" INSERT INTO Recipe (recipeName) VALUES ('"; recipeQuery + = tbRecipeName.Text +"') "; CreateCommandObject (recipeQuery, ref databaseConnection); 'Мне нужно сделать еще одну вставку в RecipeIngredients после того, как этот идентификатор назначен или я могу выполнить обновление, и чтобы идентификатор также был присвоен таблице RecipeIngredients? – Lohkii

+0

Я использую хранимые procs для обновления и вставки с параметрами для каждого поля. Возвращаемое значение из хранимой процедуры дает мне новый идентификатор. – Decker97

+0

Вы имеете в виду функцию для обновления и вставки с идентификатором в качестве возвращаемого значения? – Lohkii

Смежные вопросы