Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie löst man eine Einfügung zu einem verknüpften SQL-Server richtig aus?

Einfügungen von einem Trigger in eine Tabelle auf dem Verbindungsserver durchführen – schlechte Entscheidung. Dies wirkt sich stark auf die Einfügungsleistung in der Quelltabelle ([dbo].[Table_1]) aus, und außerdem gibt es eine verteilte Transaktion und die Konfiguration von Servern zur Unterstützung verteilter Transaktionen – Alptraum.

Eine mögliche Lösung ist:

  1. Auf dem Quellserver können Sie eine Synchronisationswarteschlangentabelle erstellen. Zum Beispiel:

    CREATE TABLE dbo.SyncQueue
    (
        QueueId INT IDENTITY(1,1),        
        KeyForSync INT, -- Primary key value of record in dbo.SourceTable
        SyncStatus INT  -- statuses can be: 0 - New, 1 - Synchronized, 2 - Error
    )
    
    suppose you source table is
    
    CREATE TABLE dbo.SourceTable
    (
            Key INT, -- primary key of the table
            Data varchar(xxx)
    )
    
  2. Trigger auf dbo.SourceTable kann schnell in dbo.SyncQueue den Datensatzschlüssel einfügen, den Sie synchronisieren müssen

  3. Einige regelmäßig ausgeführte gespeicherte Prozeduren können dann Datensätze aus der Warteschlange intable auf dem Verbindungsserver einfügen.