MSSQL - 有一种方法可以在将条目添加到另一个表时自动将条目添加到一个表中吗?

时间:2016-04-18 06:06:11

标签: sql sql-server sql-server-2008

我是一个SQL新手,所以请耐心等待。我的项目如下:

在Windows Server 2008 R2上使用MSSQL。

现有的数据库表 - 让我们称之为产品 - 包含数千行数据,这是X公司销售的每种产品的产品信息。我感兴趣的三个栏目是ITEMGROUPID,ITEMID和ITEMNAME。 ITEMID是此表的主键,是唯一的产品代码。 ITEMGROUPID表示每个项目属于哪种类别的产品,ITEMNAME是自解释的。我只对一类产品感兴趣,所以通过使用ITEMGROUPID,我可以确定我的表将有多少行(目前为260)。

我现在正在创建一个包含一些参数的表格,用于制作这些产品 - 让我们称之为LINEPARAMETERS。例如,当我们制作Widget A时,我们需要Conveyor B以速度C运行。我打算在我的表中创建一个外键,指向另一个表中的ITEMID。因此,我新表中的每一行都将引用现有产品数据库中的特定产品。

我的问题是,如果开发的新产品符合我的条件(ITEMGROUPID =' VALUE'),并使用ITEMID输入现有表格,我的表格是否可以自动生成带有该ITEMID的新行和所有其他列中的默认值?

1 个答案:

答案 0 :(得分:3)

您可以创建一个触发器,在插入product时触发,并在lineparameters中插入一行,如下所示:

create trigger line_parameter_inserter
on products
after insert
as
    insert into lineparameters (productId, col1, col2)
    values (inserted.id, 'foo', 'bar');

但更好的选择是从product表创建一个外键到组默认表,这样在插入product表之前,默认表中必须存在一行,如下所示:

create table lineparameters (
    id int,
    col1 int,
    ...,
    primary key (id)
)

create table products (
    id int,
    lineparametersId int not null,
    ...
    primary key (id),
    foreign key (lineparametersId) references lineparameters(id)
)

这将创建一个可靠的进程并确保即使有人(静默地)禁用/删除触发器,也不会出现数据完整性问题。