Ведение транзакции на связанном сервере внутри хранимой процедуры, которая использует команду OpenRowSet для чтения данных из файла Excel - PullRequest
0 голосов
/ 07 января 2010

У меня есть вспомогательная БД, которая находится на 32-битном сервере sql, и я добавил связанный сервер 64-битной системы,

для выполнения операции импорта в Excel, так как драйвер Jet.oledb не поддерживается на 64-битном сервере SQL Server.

Все работает нормально, но я должен поддерживать транзакции для вставки, обновления, удаления, которые происходят в связанной базе данных сервера,

Я настроил службу DTC на клиентском компьютере и на сервере,

Добавлен блок поверх sp для транзакции при запуске хранимой процедуры, как,

НАЧАТЬ ИСПЫТАТЬ XACT_ABORT НА НАЧАЛО СДЕЛКИ
НАЧАЛО ПОПРОБОВАТЬ

SET XACT_ABORT ON

НАЧАЛО СДЕЛКИ

- код

- код

END TRY

НАЧАТЬ ЛОВУШКУ

IF @@ TRANCOUNT <> 0 ROLLBACK TRANSACTION

- // выдает ошибку при входе на сайт.

ОБЪЯВИТЬ @ErrorMessage NVARCHAR (4000);

ОБЪЯВИТЬ @ErrorSeverity INT;

DECLARE @ErrorState INT;

ВЫБРАТЬ

@ ErrorMessage = ERROR_MESSAGE (),

@ ErrorSeverity = ERROR_SEVERITY (),

@ ErrorState = ERROR_STATE ();

RAISERROR (@ErrorMessage, - Текст сообщения.

   @ErrorSeverity, -- Severity.  

   @ErrorState -- State.  

   );  

Но выдает ошибочную поговорку,

Запрошенная операция не может быть выполнена, поскольку поставщик OLE DB "Microsoft.Jet.OLEDB.4.0" для связанного сервера "(null)" не поддерживает требуемый интерфейс транзакции.

Это ошибка в функции Openrowset, которую я использовал для чтения данных из листа Excel

т.е.,

SELECT * FROM OPENROWSET ('Microsoft.Jet.OLEDB.4.0',
'Excel 5.0; HDR = Да; IMEX = 1; База данных = C: \ test.xls ',' SELECT EmployeeID FROM [Sheet $]
где EmployeeID не равен NULL ')

Я действительно застрял и схожу с ума, так как не могу найти никакого решения,

Заранее спасибо за помощь,

Ответы [ 2 ]

1 голос
/ 02 августа 2011

У меня была похожая проблема при импорте из CSV. Решите это, назвав мою транзакцию (например, BEGIN TRAN mytran) и проверив @@ ROWCOUNT вместо @@ TRANCOUNT.

Я понимаю, что с тех пор, как ОП спросил, прошло много времени, но, возможно, это могло бы помочь кому-то найти эту проблему. :)

0 голосов
/ 14 января 2010

Что делать, если вы открываете файл Excel курсором, но перед началом транс.

...