Mar. 12th, 2015

pychick: (превед)
Я довольно рукожоп и академиев не заканчивал, потому многое приходится осваивать методом проб и ошибок.

Внезапно встала задача такая, есть два MSSQL сервера в различных сегментах сети, достаточно жетко разграниченных по портам. MSDTC между ними поднять в виду этой особенности нельзя. Теперь задача - вставить в таблицу на одном сервере данные из таблицы на другом.

Если делать в лоб на сервере-приёмнике что-то такого вида

INSERT INTO table1 (c1, c2) SELECT v1, v2 from SERVER2.DB2.dbo.table2 v1,v2 where v1=smth

то происходит попытка запустить распределённую транзакцию, которая ожидаемо проваливается с ошибкой "Error Code: 0x8004d00a, New transaction cannot enlist in the specified transaction coordinator", т.к. координатор на сервере-источнике не доступен.

Как же сделать так, чтобы распределённая транзакция не запускалась? Через BULK INSERT же, он не транзакционен! Ну, и одну временную таблицу. Одна инструкция распадается на три:

SELECT v1, v2 INTO #t from SERVER2.DB2.dbo.table2 v1,v2 where v1=smth -- вот он, BULK INSERT.
INSERT INTO table1 (c1, c2) SELECT * from #t
DROP TABLE #t

Не благодарите.
pychick: (бытовка)
Пришло такое.



А у меня и палочка не мыта.

April 2017

S M T W T F S
      1
2 34 5 678
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 14th, 2025 04:48 pm
Powered by Dreamwidth Studios