Frage

Ich habe eine SQL-Insert-Abfrage innerhalb einer gespeicherten proc, für Zeilen in einen Verbindungsserver Einfügen Tabelle.

Da die gespeicherte Prozedur wird in einer übergeordneten Transaktion aufgerufen zu werden, diese Anweisung Einfügen versucht, zum Einfügen von Zeilen in den Verbindungsserver einen DTC zu verwenden.

Ich möchte vermeiden DTC aus einzulassen.

Gibt es eine Möglichkeit I (wie ein Hinweis) tun kann, für die Insert-SQL-Anweisung Transaktionsbereich zu ignorieren?

War es hilfreich?

Lösung

Mein Vorschlag ist, dass Sie speichern, was Sie in eine Staging-Tabelle eingefügt werden sollen, und wenn die Prozedur ausgeführt ist über den Quer Server Einsatz. Meines Wissens gibt es keine Möglichkeit, die Transaktion zu ignorieren Sie sind, wenn Sie in der SProc Ausführung sind.

Im Gegensatz dazu, wenn Sie .NET 2.0 der System.Transaction Namespace verwenden, können Sie bestimmte Aussagen sagen in keiner übergeordneten Bereich Transaktion teilnehmen. Dies müssten Sie einige Ihrer Logik in Code zu schreiben, anstatt gespeicherte Prozeduren, aber funktionieren würde.

Hier ist ein entsprechender Link .

Viel Glück, Alan.

Andere Tipps

Versuchen Openquery mit der Abfrage des Verbindungsservers / sp rufen statt Direktwahl Das ist für mich

so statt einfügen in ... select * from mylinkedserver.pubs.dbo.authors

z. ERKLÄREN @TSQL varchar (8000), @VAR char (2) SELECT @VAR = 'CA' SELECT @TSQL = 'SELECT * FROM OPENQUERY (MyLinkedServer,' 'SELECT * FROM pubs.dbo.authors WHERE state = ''' '' + @VAR + '' '' '' ')

INSERT INTO .....       Exec (@TSQL)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top