0

32 ビット SQL サーバー上にヘルパー DB があり、64 ビットのリンク サーバーを追加しました。

Jet.oledb ドライバーは 64 ビットの SQL サーバー コンピューターではサポートされていないため、Excel のインポート操作を実行することはできません。

すべて正常に動作していますが、リンク サーバー データベースで発生する挿入、更新、削除のトランザクションを維持する必要があります。

クライアント マシンとサーバー マシンで DTC サービスを構成しました。

ストアド プロシージャの開始時にトランザクション用に sp の上にブロックを追加しました。

BEGIN TRY SET XACT_ABORT ON BEGIN TRANSACTION
BEGIN TRY

XACT_ABORT をオンに設定

取引開始

- コード

- コード

エンドトライ

キャッチ開始

IF @@TRANCOUNT<>0 ロールバック トランザクション

--// Web サイトにログインするためのエラーを発生させます。

DECLARE @ErrorMessage NVARCHAR(4000);

DECLARE @ErrorSeverity INT;

DECLARE @ErrorState INT;

選択する

@ErrorMessage = ERROR_MESSAGE()、

@ErrorSeverity = ERROR_SEVERITY(),

@ErrorState = ERROR_STATE();

RAISERROR (@ErrorMessage, -- メッセージ テキスト。

   @ErrorSeverity, -- Severity.  

   @ErrorState -- State.  

   );  

しかし、それはエラーをスローします。

リンク サーバー "(null)" の OLE DB プロバイダー "Microsoft.Jet.OLEDB.4.0" が必要なトランザクション インターフェイスをサポートしていないため、要求された操作を実行できませんでした。

Excelシートからデータを読み取るために使用したOpenrowset関数でエラーがスローされます

つまり、

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 5.0;HDR=Yes; IMEX=1;Database=C:\test.xls','SELECT EmployeeID FROM [Sheet$]
where EmployeeID is not null ')

解決策が見つからないので、私は本当に行き詰まり、夢中になっています。

助けてくれてありがとう、

4

2 に答える 2

1

CSVからのインポートで同様の問題がありました。トランザクションに名前を付け (例: BEGIN TRAN mytran)、@@TRANCOUNT の代わりに @@ROWCOUNT をチェックすることで解決しました。

OPが尋ねてから長い時間が経っていることは理解していますが、誰かがこの問題をグーグルで検索するのに役立つかもしれません. :)

于 2011-08-02T12:09:26.670 に答える
0

Excel ファイルをカーソルで開いたが、Begin Trans の前に開いた場合はどうなるでしょうか。?

于 2010-01-14T18:53:20.607 に答える