vorrei che un trigger creato sulla tabella
macchina1.esempio.miatbl all'evento insert, inserisca lo
stesso record sulla tabella macchina2.esempio.miatbl
non sono riuscito ad effettuare questo aggiornamento!!!!
qualcuno può aiutarmi ?????
saluti
davide
Il codice da utilizzare all'interno per la definizione del trigger è
==========================
CREATE TRIGGER t_MyTable_I ON MyTable
FOR INSERT
AS
INSERT AltroServer.Test.dbo.MyTable
SELECT * FROM Inserted
==========================
dove AltroServer è il nome della macchina remota (già aggiunta come linked
server alla macchina corrente). Si tratta, come vedi, di utilizzare un
qualificatore dell'oggetto in 4 parti nel formato
server.database.owner.oggetto
Affinchè l'istruzione possa essere eseguita è inoltre indispensabile che le
2 macchine abbiano in esecuzione il servizio MSDTC (il coordinatore di
transazioni distribuite)...
Ciao...
--
Luca Bianchi
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://www.mvps.org
cosa intendi per "già aggiunta come linked
>server alla macchina corrente" ???
davide
Per poter "vedere" un altro server, e quindi utilizzare la sintassi in 4
parti per referenziare un oggetto su un altro server, devi utilizzare un
server collegato. Puoi eseguire questa operazione da Enterprise Manager,
aprendo la cartella Security -> Linked Server, fare click con il tasto
destro e scegliere la voce "New linked Server..." Qui devi riempire i campi
con le informazioni richieste. In alternativa puoi utilizzare la stored
procedure sp_addlinkedserver di cui trovi ampia documentazione sul Book On
Line...
Ciao
Essendo anche la seconda macchina un SQLServer (in realtà
un linked server potrebbe essere qualunque fonte gestibile
da un provider OLEDB installato) non dovresti avere
particolari problemi nell'effettuare l'operazione.
Attenzione ad usare, come specificato da Luca, i
qualificatori a 4 elementi (server.database.OWNER.oggetto)
hth,
matteo
>-----Messaggio originale---
>.
>
sono riuscito a linkare il server remoto, ho visto che
funziona se faccio query,insert,delete dirette ma se
eseguo l'insert da trigger mi restituisce l'errore 7391
nonstante su entrambe i server è in esecuzione il servizio
MSDTC.
ecco il codice del trigger:
-----------------------------
CREATE TRIGGER my_trig
ON my_table
FOR insert
AS
DECLARE my_cursor CURSOR FOR (SELECT a FROM inserted)
DECLARE @a INT
BEGIN
OPEN my_cursor
FETCH NEXT FROM my_cursor INTO @a
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
insert into Sadasrl.tempdb.dbo.tu_table
select * from my_table where a = @a
END
FETCH NEXT FROM my_cursor INTO @a
END
CLOSE my_cursor
DEALLOCATE my_cursor
END
-----------------------------
grazie
davide
>sono riuscito a linkare il server remoto, ho visto che
>funziona se faccio query,insert,delete dirette ma se
>eseguo l'insert da trigger mi restituisce l'errore 7391
>nonstante su entrambe i server è in esecuzione il servizio
>MSDTC.
Ciao Davide,
prima di tutto il cursore che stai usando nel trigger
e' inutile e riduce drasticamente le prestazioni, puoi
sostuire il codice del trigger direttamente con il
seguente:
INSERT Sadasrl.tempdb.dbo.tu_table
SELECT *
FROM inserted
Per quanto riguarda l'errore, credo invece che tu
abbia configurato il "linked server" tramite l'OLE-DB
provider di SQL Server (e' l'unico modo che ho trovato
per riprodurre l'errore).
Prova ad eliminare il linked server, quando lo ricrei
scegli direttamente "SQL Server" come "Server Type"
e non "Other data source" con il relativo provider.
Ciao,
Gianluca Hotz - SQL Server MVP