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

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

Вводные
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
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
    #40044513
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, не разобрался как приложить картинку :)

Настройки под спойлером
...
Рейтинг: 0 / 0
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
    #40044636
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
    #40044652
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuCosinus,

зачем LinkedServer, исчерпаны все остальные возможности?
...
Рейтинг: 0 / 0
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
    #40044727
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
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
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
    #40044737
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Выполнить sp_executeSQL через LinkedServer из MSSQL в POSTGRESQL с последующей вставкой
    #40044743
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

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


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