在表A中插入后如何在表B中自动创建和链接记录

时间:2019-06-17 15:30:52

标签: sql-server tsql

请考虑以下情况:我有一个表Person,该表以一对多关系链接到表Address(为简洁起见,这里省略了约束):

CREATE TABLE Person (
    Id UNIQUEIDENTIFIER NOT NULL,
    AddressId UNIQUEIDENTIFIER NULL
)

CREATE TABLE Address (
    Id UNIQUEIDENTIFIER NOT NULL,
    Street NVARCHAR(100) NULL,
    City NVARCHAR(100) NULL,
    ZipCode NVARCHAR(20) NULL
)

现在,如果将一条记录插入Person表中,那么我想在Address表中自动创建一个空记录(如果AddressId列为{{1} }),然后将新的NULL链接到新的Address记录。因此,换句话说,我想在Person表中创建一条记录,并希望为每个没有Address插入的Person.AddressId更新Person

由于我要使用不同的ORM和不同的业务类从不同的应用程序访问数据库,因此我不想在业务类中(多次)添加该功能,而希望在Address上的数据库触发器中添加该功能。桌子。

  1. 在数据库触发器中执行此操作是一种好习惯吗?
  2. 触发器的最佳实现是什么(“最佳”表示性能和可读性之间的良好折衷)?

我可以使用Person循环来实现触发器,该循环遍历WHILE中的所有记录,然后为每个插入的inserted添加一条记录-如果它们没有{{1 }}已分配。但是,如果在批量操作中创建了许多Person记录(例如大导入),这似乎是不正确的方法。是否可以在一条SQL语句中以更好的性能执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用插入后触发器:

CREATE TRIGGER personInsTrigger ON Person AFTER INSERT
AS 
BEGIN
    INSERT INTO Address (Id, Street, City, ZipCode)
    SELECT AddressId, NULL, NULL, NULL
    FROM INSERTED
END

我还建议您考虑在两个表之间设置适当的外键/主键约束。 Address.Id是主键,而Person.AddressId是外键。