如何在SQL Server中同时更新多个数据库?

如何在SQL Server中同时更新多个数据库?,sql,sql-server,database,Sql,Sql Server,Database,我有7个数据库。数据库具有相同的表。我想在编辑行或添加新行时同时更新所有行。如果其中一个事务不起作用,它将不会被更新 如何更新 更新或修改单个表,并在不同数据库中使用相同的表。这比试图在7个数据库中的7个表之间保持数据一致性要好 我认为触发器可以在下面的sudo代码中帮助您,并在失败时使用回滚事务 USE Test;--Test is one db GO CREATE TRIGGER afterInsert ON table AFTER INSERT AS BEG

我有7个数据库。数据库具有相同的表。我想在编辑行或添加新行时同时更新所有行。如果其中一个事务不起作用,它将不会被更新


如何更新

更新或修改单个表,并在不同数据库中使用相同的表。这比试图在7个数据库中的7个表之间保持数据一致性要好

我认为触发器可以在下面的sudo代码中帮助您,并在失败时使用回滚事务

USE Test;--Test is one db
    GO
    CREATE TRIGGER afterInsert ON table AFTER INSERT
    AS
    BEGIN 
      IF @@rowcount = 0 RETURN;

      UPDATE Test2.[schema_name(default schema is dbo)].Clients --here test2 is another db
      SET col = col +1 -- or whatever it should be
      FROM Test2.[schema_name(default schema is dbo)].Clients c
      INNER JOIN inserted i ON ([your join condition])
    END;  
    GO

为什么在不同的数据库中需要具有相同数据的相同表。我想你需要重新设计你的应用程序和数据库。 可能的解决办法:

  • 通用模式和数据移动到单个数据库
  • 如果仍然需要数据复制,则可以更改单个数据库中的数据,并使用事务复制将数据传递到其他数据库
  • 您需要使用跨数据库事务
  • -


    您可以将所有服务器/数据库添加到已注册服务器窗格(SQL Management Studio(2016):Ctrl+Alt+G显示)中的一个组中。根据当地的服务团体

    然后在新组上按右键并选择“新建查询”


    执行查询时,它将在选定组中的所有服务器上运行

    为什么在服务器中有重复的表?这些表实际上是不同的表,恰好包含相同的数据。对吗?分布式事务?尝试使用数据库名称;编写更新语句,然后GO跨数据库事务不使用分布式事务不使用相同的数据,每个国家的数据库都有不同的数据您仍然可以使用跨数据库事务。使用多部分对象标识符访问不同数据库[数据库名称].[架构名称].[对象名称]中的对象。这是唯一值得考虑的答案。将数据分离到具有相似/相同模式的多个数据库中肯定有充分的理由。
     begin try
        begin transaction;
        update db1..table1 set field1 = value1, field2 = value2 where key = @key;
        update db2..table1 set field1 = value1, field2 = value2 where key = @key;
        ...
        update dbN..table1 set field1 = value1, field2 = value2 where key = @key;
        commit transaction;
    end try
    begin catch
        SELECT   
            ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, 
            ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure,
            ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage;  
        if @@trancount > 0  
            rollback transaction;  
    end catch