SQL 2008 - alternatief om te activeren

Ik ben op zoek naar een oplossing voor het volgende:

Database: A
  Tabel: Factuurlijsten

     

Database: B
  Tabel: MyLog

Telkens als lijnen worden toegevoegd aan InvoiceLines in database A, wil ik een query uitvoeren die de tabel MyLog in database B updat. En ik wil het meteen.

Normaal zou ik een trigger creëren in database A op INSERT in InvoiceLines. Het probleem is dat database A bij een ERP-programma hoort waar ik helemaal geen wijzigingen wil aanbrengen (updates, onbekende functionaliteit in 3-lagenprogramma, enz.)

Eventuele tips om mij in de juiste richting te helpen ...?

1
tenzij je de db-socket wilt kapen, ben ik bang dat triggers je enige manier zijn hier.
toegevoegd de auteur Teson, de bron
Jawel, triggers zijn het mechanisme om dit te doen. Als u ze niet wilt gebruiken, kunt u niet echt denken aan alternatieven die niet gekunsteld zijn.
toegevoegd de auteur Martin Smith, de bron
Het is alsof u alles wilt weten wat er is gebeurd in een huis waar u niet bevoegd was om een ​​CCTV-camera te installeren.
toegevoegd de auteur Andriy M, de bron
nou als je niets op de DB zelf kunt doen, dan zul je een externe app moeten gebruiken om de tabel te controleren en de wijzigingen in Database B te posten.
toegevoegd de auteur Asher, de bron

3 antwoord

Een trigger in de ene database kan een andere bijwerken.

U hoeft alleen de naam van de tablr te kwalificeren, of beter nog een opgeslagen procedure aan te roepen. De database kan zelfs op een andere server staan ​​als je wilt rotzooien.

Insert into MyOtherDB..MyLogTable select ... From Inserted 

Of

Exec MyOtherDB..LogInsert(@p1,@p2)

fOfinstance

Bewerken na reactie ...

Helemaal geen veranderingen ...

.net's SQLDependency class geeft je een manier, als je een app wilt schrijven.

Similar but sadly inefficient would, be to execute a sceheduled stored proc on Database that looked fOfchanges in A and acted accordingly.

1
toegevoegd
Oh, helemaal niets. Zal bewerken
toegevoegd de auteur Tony Hopkinson, de bron
Ja dat weet ik. Het probleem is dat ik niets in database A wil doen - dus ik kan hier geen trigger maken.
toegevoegd de auteur Frank Thure Lindgren, de bron

U kunt transactionele replicatie gebruiken om wijzigingen van uw tabel in database A naar een kopie in DB B te verzenden en vervolgens uw triggers op de kopie te maken. Het is niet 'instant', maar het wordt meestal beschouwd als 'bijna in realtime'.

U kunt DB-mirroring misschien op de een of andere manier gebruiken, maar u moet een aantal tests uitvoeren om te zien of u het goed kunt laten werken (misschien triggers in de spiegel instellen die niet in het origineel bestaan?)

0
toegevoegd

Een mogelijke oplossing voor het repliceren van de triggerfunctie zonder database-update is om de tabel te pollen door een externe applicatie (dat wil zeggen java) die bij het vinden van een nieuwe invoeging de vereiste vraag zou ontbranden.

In SQLServer2008 kan iets soortgelijks worden gedaan via C# assembly, maar dit moet opnieuw worden geïnstalleerd, wat een database-update vereist.

0
toegevoegd