请考虑以下情况:我有一个表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
上的数据库触发器中添加该功能。桌子。
我可以使用Person
循环来实现触发器,该循环遍历WHILE
中的所有记录,然后为每个插入的inserted
添加一条记录-如果它们没有{{1 }}已分配。但是,如果在批量操作中创建了许多Person
记录(例如大导入),这似乎是不正确的方法。是否可以在一条SQL语句中以更好的性能执行此操作?
答案 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
是外键。