Ale pomiędzy instancjami, to już średnio. Jakaś podpowiedź?
To jest dokładnie tak samo jak pomiędzy bazami, z tą różnicą że musisz utworzyć Linked Server, możesz w SSMS na drzewie Server Objects->Linked Servers kliknąć prawy przycisk myszy i wybrać opcje Add Linked Server
Lub przy pomocy t-sql, zakładając że serwer nazywa się serwer i ma dwie instancje i1 i i2 a trigger uruchamiasz na instancji i1 to
- Tworzysz linked server na instancji i1:
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'serwer\i2', @srvproduct=N'SQL Server'
GO
--tutaj logowanie za pomocą autoryzacji SQL użytkownikiem user i hasłem: haslo
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'serwer\i2', @locallogin = NULL , @useself = N'False', @rmtuser = N'user', @rmtpassword = N'haslo'
GO
/*ewentualne możliwości, logowanie przy pomocy aktualnie zalogowanego użytkownika:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'serwer\i2', @locallogin = NULL , @useself = N'True'
GO
bez kontekstu:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'serwer\i2', @locallogin = NULL , @useself = N'False'
GO
*/
i testujesz czy działa, np. zapytanie:
select * from [serwer\i2],baza.dbo.tabela
zwróć uwagę jak odwołujesz się do tabeli: nazwaserwer.nazwabazy.schemat,obiekt
No i też walisz triggera:
CREATE TRIGGER T_TableA_I
ON TableA
after INSERT
AS
SET nocount ON
INSERT INTO [serwer\i2].baza.dbo.tabela (ColumnA,ColumnB,/* lista kolumn */)
SELECT a.ColumnA,a.ColumnB, /* lista kolumn z table a */
FROM
inserted i
go
Od siebie dodam, że to jest kombinacja alpejska, jak napiszesz triggera który rozrzuca dane po innych instancjach, to możesz natrafić na problemy, pamiętaj, że zapytania sql są wykonywane synchronicznie, pomyśl o tym co się stanie jak trigger ci się gdzieś wywali na komunikacji i zwróci błąd. To są rzeczy, które musisz przemyśleć na początku, aby calosci nie przepisywać.
Po zadanym pytaniu domyślam się że nie za bardzo ogarniasz samego SQL-a, ale przemyśl sobie co robisz, abys nie ugrząsł na problemie, jak użytkownicy zaczna zgłaszać że nie da się nic zapisać do bazy....
Ja w takim przypadku szedłbym w Service Brokera....