【问题标题】:copy an identity column into another table将标识列复制到另一个表中
【发布时间】:2010-11-06 10:21:40
【问题描述】:

我有 2 个相关的表,都有主键的标识列,我使用 vb 表单向其中插入数据,我的问题是我无法让子表获取父表的主键并将其用作我的数据库中的外键。 尽管没有进行外键约束,但数据插入得很好。我想知道触发器是否会这样做,如果是的话如何。我所有的数据插入都是在vb中完成的。

用户不会插入任何键。所有这些都是自动生成的标识列。如果触发器是我的出路,请举例说明。

如果有另一种方法我可以在 VB 本身中做到这一点,那么请提出建议,我们将不胜感激

提前致谢

【问题讨论】:

  • 需要更多信息,具体的表结构是什么,你能说得更具体一点吗?

标签: sql-server vb.net auto-increment


【解决方案1】:

我想到了两种方法(假设是 SQL Server):

  1. 插入第一个表(父表),然后获取使用@@IDENTITY 生成的标识键,然后将记录插入到具有检索值的子表中。
  2. 编写一个存储过程,插入两条记录并在内部使用@@IDENTITY。

【讨论】:

    【解决方案2】:

    我会检查您的数据库设计: “我的问题是我无法让子表获取父表的主键” 在子表上,您可以设置身份列,但不能设置为外键。请创建一个数据类型为 int 的新列作为外键。

    create table parent (id int identity(1,1) not null, data varchar(100)...)
    create table child (id int identity(1,1) not null, parent_id int not null, data varchar(100)...)
    

    要检索存储在数据库中的信息,请使用如下查询:

    select parent.id, parent.data, child.data
    from parent, child 
    where parent.id = child.parent_id
    

    要将数据插入两个表中,您必须使用两个步骤:

    insert parent(data) values('This is a test for parent-record')
    insert child(parent_id, data) values(@@IDENTITY, 'This is testdata for the child record')
    

    注意@@IDENTITY 值,因为如果在父表后面的插入处触发触发器,您可能不会得到最后一个父表标识值,具体取决于触发器所做的工作。

    【讨论】:

      猜你喜欢
      • 2017-11-02
      • 1970-01-01
      • 2017-03-29
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2010-10-05
      相关资源
      最近更新 更多