将标识列复制到另一个表中

时间:2009-06-27 23:00:00

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

我有2个相关的表,两个都有主键的标识列,我使用vb表单将数据插入其中,我的问题是我无法获取子表来获取父表的主键并将其用作我的数据库中的外键。 虽然没有外键约束,但数据插入正常。我想知道触发器是否会执行此操作,如果是这样的话。我所有的数据插入都是在vb。

中完成的

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

如果还有其他方法可以在VB中执行此操作,请提供建议,我们将非常感谢您的示例

提前致谢

2 个答案:

答案 0 :(得分:1)

我想到了两种方式(将假设SQL Server):

  1. 插入第一个表(父级),然后获取使用@@ IDENTITY生成的身份密钥,然后使用检索到的值在子表中插入记录。
  2. 编写一个插入两个记录的存储过程,并在内部使用@@ IDENTITY。

答案 1 :(得分:1)

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

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值,因为如果在父表后面的插入处触发触发器,则可能不会获得最后一个父表 - 标识值取决于触发器的工作。