我有一个更新两个表的存储过程。第一个表始终是同一个表,但第二个表根据传入的参数而变化。将其全部写入一个大过程中是否更有效
CREATE PROCEDURE MyBigProc
@id int
@param int,
@value1 int,
@value2 int
AS
BEGIN
SET NOCOUNT ON;
-- First table to update
UPDATE MyTable SET field1 = @value1 WHERE id = @id
-- Then choose which table to update based on @param
IF @param = 1
UPDATE MySecondTable SET field2 = @value2 WHERE id = @id
IF @param = 2
UPDATE MyThirdTable SET field2 = @value2 WHERE id = @id
END
或者我应该为每个表编写一个单独的过程,然后从主过程中调用 EXEC 该过程。
我想后者更灵活,比如说我想更新子表但不更新主表?
最佳答案
I suppose the latter is more flexible, say if I wanted to update a subtable but no the main table?
确实,您有充分的理由将工作分配给 2 个单独的进程。如果这对你来说对其他一切都有意义,我不明白为什么不遵循这种方法。
不这样做的一个可能原因是,如果您需要两个更新同时成功或失败。在这种情况下,我会将所有内容保留在一个进程中,并将所有内容包含在一个事务中。
关于sql - 更新多个表的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444923/