Domanda

Ho una query di inserimento SQL all'interno di un processo memorizzato, per inserire righe in un file server collegato tavolo.

Poiché la procedura memorizzata viene chiamata all'interno di una transazione principale, questa istruzione Insert tenta di utilizzare un DTC per inserire righe nel server collegato.

Vorrei Evitare DTC dall'essere coinvolto.

Esiste un modo per farlo (come un suggerimento) affinché l'istruzione Inserisci SQL ignori l'ambito transazionale?

È stato utile?

Soluzione

Il mio suggerimento è di archiviare tutto ciò che si desidera inserire in una tabella di staging e, una volta terminata la procedura, eseguire l'inserimento tra server.Per quanto ne so, non c'è modo di ignorare la transazione in cui ti trovi una volta che sei all'interno dell'esecuzione SProc.

Al contrario, se si utilizza lo spazio dei nomi System.Transaction di .NET 2.0, è possibile indicare a istruzioni specifiche di non partecipare ad alcuna transazione con ambito padre.Ciò richiederebbe di scrivere parte della logica in codice anziché in procedure memorizzate, ma funzionerebbe.

Ecco un collegamento pertinente.

Buona fortuna, Alan.

Altri suggerimenti

Prova a utilizzare OpenQuery per chiamare la query/SP del server collegato invece di chiamare diretta che ha funzionato per me

Quindi invece di inserire in ...selezionare * da mylinkedserver.pubs.dbo.authors

per esempio.Dichiara @tsql varchar (8000), @var char (2) seleziona @var = 'ca' seleziona @tsql = 'seleziona * da openQuery (mylinkedserver,' 'seleziona * da pubs.dbo.authors dove lo stato =' '' ' ' + @Var +' '' '' '') '

INSERIRE .....EXEC (@TSQL)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top