【问题标题】:How to insert an auto-generated ID of one table into another table's ID如何将一个表的自动生成的 ID 插入另一个表的 ID
【发布时间】:2013-01-08 12:44:27
【问题描述】:

我正在尝试制作一个在线购物网站的项目。我有三个表,即类别表、子类别表和产品表。在类别表中我有CategoryIDCategoryName 作为两个字段。在子类别表中我有CategoryIDSub-CategoryIDSubCategoryName 作为字段,在产品表中我有CategoryID、@ 987654327@、ProductIDProductName

现在在类别表中,categoryID 是自动生成的并设置为主键。在子类别表中,没有任何键是自动生成的,并且 categoryID 和 subCategory ID 都设置为组合主键。现在,当我将 categoryName 插入到类别表中时,我希望将 CategoryID(自动生成)插入到 SubCategory 表的 categoryID 列和 ProductTable 的 CategoryID 列中。网上有很多关于这件事的内容,但没有一个能完全解决我的问题。

【问题讨论】:

  • 所以您只想在目标表中创建一个新行?或者这是在存储过程的上下文中,您需要找出刚刚创建的行并使用该值继续前进?
  • 所以你想自动插入具有相同名称的子类别和引用新创建类别的 fk?为什么创建新类别时需要在Product 表中插入内容?
  • @Brian,能否详细说明存储过程的方法。我正是希望这种情况发生。我希望在类别表中插入一行后立即将 CategoryID(自动递增)插入到其他两个表中
  • 我不确定您为什么真的想这样做。在其他表上使用外键约束并手动将值插入表中会更好。查看存储过程和@@identity。
  • 不,我不想手动将数据插入数据库。我想要一个 AdminControl 面板,他可以从中插入 CategoryName、SubCategoryName 以及 ProductName

标签: c# asp.net .net


【解决方案1】:

我认为您为此对用户 SCOPE_IDENTITY 感到羞耻

SCOPE_IDENTITY 返回为任何表生成的最后一个标识值。

【讨论】:

    【解决方案2】:

    我觉得你的设计有一股难闻的味道。

    您不需要在子表中包含复合主键,因为您已经在表中定义了唯一标识符。相反,只需使用一列作为主键并将外键关系添加到您的子表。

    【讨论】:

    • 在这种情况下外键有什么用?如果我使用它,我可以直接在 sub-Category 和 ProductTable 中插入值
    • 使用外键是为了确保数据的引用完整性。例如,如果您不能 1) 有一个没有相关类别的子类别 2) 有一个没有相关子类别的产品,那么您应该在子类别表中设置 CategoryID 作为 CategoryID 的外键在 Category 表中,并将 Products 表中的 Sub-CategoryID 设置为 Sub-Category 表中 Sub-CategoryID 的外键。此外,您应该练习标准化,因为 Products 表中根本不需要 CategoryID。
    • @Kevin ...你能提供一些关于这个的链接或教程
    【解决方案3】:
    INSERT INTO Category (....) VALUES(....)
    
    DECLARE @id int;
    SELECT @id=SCOPE_IDENTITY();
    
    INSERT INTO Subcategory(CatagoryID,....) VALUES(@id,....)
    INSERT INTO Product (CategoryID,....) Values(@id,...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 2020-06-01
      • 1970-01-01
      • 2011-06-07
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多