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

标签 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 和默认值?

最佳答案

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

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

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

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)
)

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

关于sql - MSSQL - 有没有一种方法可以在将条目添加到另一个表时自动将条目添加到一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36686534/

相关文章:

sql - 显示乱序时差

sql - 其中文件名如 '%_123456_%'

mysql - 分组以避免在其中一个值发生更改的行之间返回具有相同列值集的行

sql-server-2008 - SQL中错误跟踪系统的数据库设计

c# - SSIS 脚本组件 : Microsoft. SqlServer.Dts.Pipeline.BlobColumn

sql-server - "If not exists"在 SQL CE 上失败

mysql - 每个数据库提供程序类型允许的最大参数数是多少?

sql-server - 删除重复数据并加载到 SQL Server 中的另一个表中

sql - 是否可以拒绝从特定程序访问 SQL Server?

SQL Server 更新权限