Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

inserimento su tabelle di db diversi

109 views
Skip to first unread message

davide fava

unread,
Jul 23, 2003, 6:00:42 AM7/23/03
to
salve a tutti
ho due server sql (macchina1 e macchina2) con lo stesso
database (esempio) e le stesse tabelle (miatbl):

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

Luca Bianchi

unread,
Jul 23, 2003, 6:57:17 AM7/23/03
to

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


davide fava

unread,
Jul 23, 2003, 7:24:33 AM7/23/03
to

>-----Messaggio originale---
>.
>

cosa intendi per "già aggiunta come linked
>server alla macchina corrente" ???

davide

Luca Bianchi

unread,
Jul 23, 2003, 8:58:48 AM7/23/03
to
davide fava wrote:
> 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

matteo mago merlano

unread,
Jul 23, 2003, 9:01:24 AM7/23/03
to
macchina2 va prima "registrato" sull'istanza dove viene
creato il trigger.
Per fare questo puoi utilizzare l'EM in
Security-->Linked Servers
e selezionare l'opzione "New Linked Server"

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---

>.
>

davide fava

unread,
Jul 24, 2003, 2:13:26 AM7/24/03
to

>-----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

Gianluca Hotz

unread,
Jul 24, 2003, 7:40:20 AM7/24/03
to
"davide fava" <david...@sadasrl.net> wrote in message
news:0a2e01c351aa$b1a3d460$a001...@phx.gbl...

>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


0 new messages