sql - 更新多个表的存储过程

标签 sql sql-server stored-procedures

我有一个更新两个表的存储过程。第一个表始终是同一个表,但第二个表根据传入的参数而变化。将其全部写入一个大过程中是否更有效

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/

相关文章:

python - 语法错误 : Non-ASCII character '\xd1'

MySQL:引用 WHERE 中的 SELECT 子查询别名

sql - 如果数据库不存在则创建数据库

sql - 将表中的行分组

sql - 与直接运行存储过程相比, Entity Framework ExecuteStoreQuery 速度较慢

java - 组合框链接到 MySQL 和 Jtextfield

java - 如何以与驱动程序无关的方式与 DB(SQL Server、PG)建立 SSL 连接?

sql - SQL Server 通配符范围(例如 [A-D])如何与区分大小写的排序规则一起使用?

sql - 如何授予数据库角色对架构的执行权限?我究竟做错了什么?

MYSQL存储过程迭代Json数组数据