Как запустить удаленный sproc через связанный сервер и сохранить результаты во временной таблице на кластерном сервере - PullRequest
0 голосов
/ 07 апреля 2011

Мне нужно иметь возможность запустить удаленный sproc и сохранить его результаты во временной таблице, чтобы можно было продолжить обработку данных. Я могу выполнить приведенный ниже оператор exec самостоятельно и получить данные обратно, однако при попытке вставить во временную таблицу я получаю следующее сообщение об ошибке:

Поставщик OLE DB «SQLNCLI» для связанного сервера «LinkedServerName» вернул сообщение «Нет активных транзакций». Сообщение 7391, уровень 16, состояние 2, строка 8 Не удалось выполнить операцию, поскольку поставщику OLE DB «SQLNCLI» для связанного сервера «LinkedServerName» не удалось начать распределенную транзакцию.

Я не хочу использовать объединение, потому что оно очень медленное, поэтому я решил попробовать выбрать нужные данные, вызвав удаленный sproc во временную таблицу, а затем поработать с ним таким образом.

Я безуспешно пытался выполнить следующие инструкции: http://sql -articles.com / блог / связной сервер проблемно-окна-2003-sp1-настройка-MSDTC-безопасность конфигурация / Я считаю, что основная проблема заключается в том, что исходный сервер (где я использую приведенный ниже SQL) является кластерным сервером, и что мне не хватает некоторых настроек для DTC. Есть идеи?

--drop table #tmp

CREATE TABLE #tmp
(
    col1 int,
    col2 int
);

insert into #tmp (col1, col2)
exec [LinkedServerName].[RemoteDBName].dbo.remote_sproc '04/01/2011', '04/06/2011'

select * from #tmp

1 Ответ

0 голосов
/ 11 июня 2011

Хотя я не нашел способа использовать распределенные транзакции в настройке кластерного сервера, я нашел альтернативный способ удаленного сбора данных с помощью OPENROWSET. С точки зрения производительности, он казался очень похожим на использование связанного сервера и хорошо работает в нашей производственной среде.

/*
-- run the following once to configure SQL server to use OPENROWSET...

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

*/

-- still need a table to store the result set in to work
-- with the data after we grab it...

declare @table table
(
    col1 int,
    col2 int
);

-- use openrowset instead of a linked server

insert into @table
select *
FROM OPENROWSET('SQLNCLI', 'Server=HOSTNAME;Uid=USERNAME;Pwd=PASSWORD',
     'EXEC DBName.dbo.sprocName ''Param1'', ''Param2''')

select * from @table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...