如果我有两张桌子A和B:
A(AId,a1,a2) B(BId,AId,b1,b2,b3)
首先想到的是,我想写一个sp(存储过程)包含两个插入语句。
但是,在一秒钟之后,我觉得如果我有一个分离的sp为表B执行插入而另一个为表A执行插入,同时从A中调用B的插入sp,则会觉得更好。
请问哪种方法最好?
答案 0 :(得分:1)
这取决于:如果您假设您可以在另一个环境中(即在SP的A之外)重新使用SP for B,请创建一个单独的SP。否则,只有一个SP(特别是,如果它只是一个带有两个INSERT语句的简单SP)可能会降低数据库层的复杂性。
答案 1 :(得分:1)
做两个单独的程序。即使您现在看不到需要将它们分开,通常将指向未来,您希望仅对其中一个进行单独插入。然后你会很高兴分裂SP。 (关注点分离)
答案 2 :(得分:0)
我想说从维护的角度来看,最好有两个程序,因为它使设计更清晰,两个简短的程序比一个大程序更容易理解和设计。我不知道这种方法是否会产生任何性能影响。
答案 3 :(得分:0)
您还可以在两个表上创建视图,并在视图上使用INSTEAD OF INSERT触发器。这样你就把所有东西当作一张桌子。
CREATE VIEW dbo.vAB
AS
SELECT x.AId, a1, a2, BId, b1, b2 ,b3
FROM dbo.A AS x JOIN dbo.B AS y on x.AID = y.AID
go
CREATE TRIGGER dbo.myInsrt
ON dbo.vAB
INSTEAD OF INSERT
AS
BEGIN
-- your code here to deal with both tables
END