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

时间:2018-08-08 06:25:14

标签: sql sql-server database

我有7个数据库。数据库具有相同的表。当我编辑行或添加新行时,我想同时更新所有它们。如果其中一项交易无效,则不会更新。

我该如何更新?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我认为下面的触发器可以为您提供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

答案 2 :(得分:0)

为什么需要在不同数据库中具有相同数据的相同表。恕我直言,您需要重新设计您的应用程序和数据库。 可能的解决方案:

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

-

 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

答案 3 :(得分:0)

您可以在 已注册服务器 窗格中将所有服务器/数据库添加到一个组中(SQL Management Studio:Ctrl + A + G来显示)。在本地服务组下。

然后在新组上按右键,然后选择“新查询”。

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