Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой / 7 сообщений из 7, страница 1 из 1
11.02.2021, 16:38
    #40044510
RuCosinus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
Добрый день.

Собственно, сама суть вопроса в теме. Опишу подробнее.

Вводные
1) Есть БД на POSTGRESQL, на которой расположена view posgrView
2) Есть БД на MSSQL, в которой необходимо получить данные из posgrView по динамически изменяемым условиям
3) Для других связанных серверов на MSSQL настроен DTC
4) Есть LinkedServer LS_Postgr на MSSQL, в настройках которого значение настройки "Разрешить продвижение распределенных транзакций для RPC" установлено в false

Что я делаю
Создана процедура, в которой в зависимости от пришедших параметров, в nVarchar-переменную набирается запрос для OpenQuery
Далее я выполняю его через
Код: sql
1.
exec sp_executeSQL @QueryStr



Результат
Все хорошо, пока я не пытаюсь вставить полученные данные во временную таблицу для последующих обработок. Если же пытаюсь, то получаю ошибку
OLE DB provider "MSDASQL" for linked server "LS_Postgr" returned message "MSDTC XARMCreate error".
Сообщение 7391, уровень 16, состояние 2, строка 1
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LS_Postgr" was unable to begin a distributed transaction.


Суть ошибки более-менее понятна, вроде, но не понятно, возможно ли как-либо от нее избавиться?
Куда смотреть, что почитать?

Настройки LinkedServer в приложенной картинке.
...
Рейтинг: 0 / 0
11.02.2021, 16:44
    #40044513
RuCosinus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
Прошу прощения, не разобрался как приложить картинку :)

Настройки под спойлером
...
Рейтинг: 0 / 0
11.02.2021, 21:14
    #40044636
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
1. "The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LS_Postgr" was unable to begin a distributed transaction."

Это не смущает?

2. Какой ОЛЕДБ провайдер для PostgreSQL используете?
...
Рейтинг: 0 / 0
11.02.2021, 22:41
    #40044652
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
RuCosinus,

зачем LinkedServer, исчерпаны все остальные возможности?
...
Рейтинг: 0 / 0
12.02.2021, 09:16
    #40044727
RuCosinus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
Ролг Хупин
1. "The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LS_Postgr" was unable to begin a distributed transaction."
Это не смущает?

Смущает. Именно это и смущает, но я решил, что это как раз к DTC, поэтому настройки LinkedServer-а и привел. Если это не так, поправьте, пожалуйста.
Ролг Хупин
2. Какой ОЛЕДБ провайдер для PostgreSQL используете?

Microsoft OLE DB Provider for ODBC Drivers

Владислав Колосов
RuCosinus,
зачем LinkedServer, исчерпаны все остальные возможности?

А что не так с LinkedServer? Мне казалось этот способ наиболее правильным и быстрым. Я не прав?
...
Рейтинг: 0 / 0
12.02.2021, 09:59
    #40044737
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
RuCosinus,

Сделайте loopback-сервер
Код: sql
1.
2.
3.
4.
5.
6.
7.
use master;
exec sys.sp_addlinkedserver @server = N'Loopback', @srvproduct = N'', @provider = N'SQLNCLI', @datasrc = @@servername;
exec sys.sp_addlinkedsrvlogin @rmtsrvname = N'Loopback', @useself = N'True', @locallogin = null, @rmtuser = null, @rmtpassword = null;
exec sys.sp_serveroption @server = N'Loopback', @optname = N'data access', @optvalue = N'true';
exec sys.sp_serveroption @server = N'Loopback', @optname = N'rpc', @optvalue = N'true';
exec sys.sp_serveroption @server = N'Loopback', @optname = N'rpc out', @optvalue = N'true';
exec sys.sp_serveroption @server = N'Loopback', @optname = N'remote proc transaction promotion', @optvalue = N'false';



И заполняйте таблицу так
Код: sql
1.
2.
insert into ...
 exec Loopback.MyDB.sys.sp_executesql @QueryStr;
...
Рейтинг: 0 / 0
12.02.2021, 10:38
    #40044743
RuCosinus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
invm,

Спасибо, все заработало.
Пошел читать про loopback
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]