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

ASF*_*est 5 sql sql-server sql-server-2008

我有点像SQL新手,所以请耐心等待.我的项目如下:

在Windows Server 2008 R2上使用MSSQL.

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

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

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

Boh*_*ian 3

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

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

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

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)
)
Run Code Online (Sandbox Code Playgroud)

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